0

由于返回类型在函数重载中没有任何作用,编译器只检查调用时使用的那部分代码的唯一性。

那为什么这段代码不包含错误

class Temp{
  Temp(){
    System.out.println("Default Constructor");
  }
  void Temp(){
    S.o.p("HEll"); 
  }
  public static void main(String a[]){
    new Temp();
  }
}

输出=默认构造函数...//我很震惊没有编译时间错误,因为编译器只检查调用时使用的那些代码部分,这意味着编译器只需要检查 Temp() 的唯一存在并且没有Temp() 的独特存在。

请详细说明

4

6 回答 6

2

因为void Temp()是一种方法,您应该在实例上调用它。允许使用类名声明方法,但调用不同。您只能使用new运算符调用构造函数。

您可以在JLS#8.8中阅读有关构造函数的更多信息。构造函数声明

构造函数永远不会被方法调用表达式调用(第 15.12 节)。

您应该注意的主要区别是构造函数没有返回类型,并且重载的定义包括返回类型。

于 2012-10-12T18:37:19.600 回答
1

构造函数不需要返回类型,void Temp()将被视为方法而不是构造函数。

调用时void Temp();,将调用不带参数的构造函数。

于 2012-10-12T18:37:48.693 回答
1

一个是构造函数,另一个不是。

于 2012-10-12T18:38:24.350 回答
1

编译器使用关键字区分方法和构造函数调用new。只有构造函数可以在new关键字之后。

于 2012-10-12T18:38:43.843 回答
0

类、方法和字段位于不同的命名空间中。编译器总是可以确定使用什么构造,并且很容易区分new Temp()(类)与o.Temp()(方法)和o.Temp(字段)。

于 2012-10-12T18:42:57.203 回答
0

使用 Eclipse,您可以避免这种用法:

请参阅上面的行 请参阅“应用”按钮上方的行

于 2012-10-12T18:46:00.090 回答