0

このコードがコンパイルされる理由を理解しようとしています。

public class A {
}

public class B extends A {
  public B() {
  }
}

このコードはしませんが:

public class A {
  public A(int n) {
  }
}

public class B extends A {
  public B() {
  }
}

つまり、どちらの場合も、クラスAには空白のコンストラクターがありませんか?もしそうなら、なぜそれが機能しないのですか?

前もって感謝します

4

1 に答える 1

6

スーパークラスに引数を持つコンストラクターしかない場合は、以下のように、サブクラスからスーパークラスのコンストラクターを明示的に呼び出す必要があります。

public B() {
    super(2);// passing an int value to your super class cons
}

どちらの場合も、クラスAには空白のコンストラクターがありませんか?

いいえ。コンストラクターを宣言すると、コンパイラーにはデフォルトのコンストラクターが含まれclass Aないため、ケース2にはデフォルトの引数なしコンストラクターがなく、サブクラスコンストラクターから明示的にスーパー呼び出しを行う必要があります。

于 2013-01-06T23:39:31.543 に答える