4

有一个类 U1 正在扩展类 U。类 U 是空的......

在 U1 的构造函数中有第一行,调用超类的构造函数......

public U1(Plate plate, int order)
{
   super(plate, order);
...

}

现在我想删除 U1 类并在 U1 类中执行迄今为止在 U1 中所做的任何事情......所以,现在我不需要调用超类的构造函数,因为 U 类不会有任何超类......

this(plate, order)不必要的,我可以省略吗?

这就是我的 U 构造函数的样子:

public U(Plate plate, int order)
    {
       this(plate, order);
    ...

    }
4

5 回答 5

8

这是不必要的,我希望它会导致堆栈溢出,因为您从构造函数中调用构造函数本身。

于 2013-03-13T08:31:16.833 回答
7

这将导致编译错误。JLS第8.8.7 节说:

“构造函数通过一系列涉及 . 的一个或多个显式构造函数调用直接或间接调用自身是编译时错误this。”

在这种情况下,构造函数直接调用自身。

于 2013-03-13T08:37:34.510 回答
1

在如下示例中,我们将得到错误:递归构造函数调用,

class TestConstruct{
 public TestConstruct(){
  this();
  System.out.println("constructor of Test class");
 }//end of constructor 
}//end of class TestConstruct
public class AppConstruct{ 
 public static void main(String[] a){
 Test t = new Test(); 
 }//end of main
}//end of AppConstruct
于 2013-03-13T09:02:28.573 回答
0

并不是说你可以忽略它。您必须省略它,否则它将充当永无止境的递归调用。

于 2013-03-13T08:37:12.887 回答
0

我们在构造函数中调用super()来初始化继承自超类的实例变量,所以如果没有超类就不需要调用super()——java.lang.Object例外。如果多构造函数在哪里,我们可以通过 this() 调用其他构造函数,但不要调用构造函数本身,这会导致之前人们提到的坏事。

于 2013-03-13T08:46:43.947 回答