0

我不明白为什么会这样

例如:

class Test
{
   public void someMethod()
   {



   }

}

进而

Test test = new Test();

为什么需要写变量的类型,所以如果你看到变量分配了那个自定义类,我认为这是一些溢出写作)。

ps:这是java,我是新手,如果问题很愚蠢,很抱歉,但我现在不明白

4

2 回答 2

3

您正在声明变量(引用)的类型,与对象的类型不同。

例如,您的变量类型可以是Test,也可以是超类型 ( Object) 或Test实现的接口。你选择哪一个取决于你的客户应该如何引用初始化的对象。例如,他们是否应该知道它是一种特定类型,或者他们只知道它将实现给定接口或功能子集是否足够(或可取)。

一个更好的例子是:

Animal animal = new Dog();

您的客户端代码只知道它正在处理动物。即它可以(说)调用一个方法.eat(),但它不会知道 a 的Dog吃法与 a 不同Fish

请注意,某些语言(例如 Scala)会执行类型推断。也就是说,您不必声明变量类型,而是编译器将根据您对变量的后续使用来确定它应该是什么类型。结果代码仍然是静态类型的,但编译器会为您做更多的工作。

于 2012-04-12T14:51:58.420 回答
1

问题是声明变量和创建变量实例之一。第一个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);
于 2012-04-12T14:54:19.650 回答