4

クラス U を拡張するクラス U1 がありました。クラス U は空でした...

U1 のコンストラクターには、スーパークラスのコンストラクターを呼び出すこの最初の行がありました...

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

}

ここで、クラス U1 を削除し、これまで U1 で行われていたことをすべてクラス U で行いたいと考えています...クラス 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

次のサンプルでは、​​Error: recursive constructor invocation,

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() を呼び出します。そのため、スーパークラスが存在しない場合 (java.lang.Object を除く)、super() を呼び出す必要はありません。マルチコンストラクターがどこにある場合、 this() を実行して他のコンストラクターを呼び出すことができますが、コンストラクター自体を呼び出さないでください。

于 2013-03-13T08:46:43.947 に答える