我不明白为什么会这样
例如:
class Test
{
public void someMethod()
{
}
}
进而
Test test = new Test();
为什么需要写变量的类型,所以如果你看到变量分配了那个自定义类,我认为这是一些溢出写作)。
ps:这是java,我是新手,如果问题很愚蠢,很抱歉,但我现在不明白
我不明白为什么会这样
例如:
class Test
{
public void someMethod()
{
}
}
进而
Test test = new Test();
为什么需要写变量的类型,所以如果你看到变量分配了那个自定义类,我认为这是一些溢出写作)。
ps:这是java,我是新手,如果问题很愚蠢,很抱歉,但我现在不明白
您正在声明变量(引用)的类型,与对象的类型不同。
例如,您的变量类型可以是Test
,也可以是超类型 ( Object
) 或Test
实现的接口。你选择哪一个取决于你的客户应该如何引用初始化的对象。例如,他们是否应该知道它是一种特定类型,或者他们只知道它将实现给定接口或功能子集是否足够(或可取)。
一个更好的例子是:
Animal animal = new Dog();
您的客户端代码只知道它正在处理动物。即它可以(说)调用一个方法.eat()
,但它不会知道 a 的Dog
吃法与 a 不同Fish
。
请注意,某些语言(例如 Scala)会执行类型推断。也就是说,您不必声明变量类型,而是编译器将根据您对变量的后续使用来确定它应该是什么类型。结果代码仍然是静态类型的,但编译器会为您做更多的工作。
问题是声明变量和创建变量实例之一。第一个Test
声明变量。您可以通过以下方式在不创建实例的情况下执行此操作:
Test test;
第二个Test
调用new Test()
变量的构造函数。在这种情况下,由于您没有创建构造函数,因此您使用的是默认Object
构造函数。这可以使用先前定义的变量来完成,如下所示:
Test test;
test = new Test();
Also you can have multiple constructors that take different parameters and then you have to specify which you want to use.
public class Test {
public Test(int i) {
}
public Test() {
}
}
Then you can do
Test test = new Test();
Test test2 = new Test(2);