0

以下のコードでは、サブクラスの super(t) がそのスーパークラス (クラス B) で引数なしのコンストラクターを明示的に呼び出していることがわかります。理解に問題があるように思われるのは、サブクラスがスーパークラスで引数なしのコンストラクターを呼び出さなければならないのはなぜですか? 私はこれの目的を理解できないようですか?

public class Test {

    public static void main(String[] args) {

       B b = new B(5);

    }
}
class A extends B {
    public A(int t)  {
        super(t);
        System.out.println("A's constructor is invoked");
    }
}

class B  {



    public B(int k)   {
    System.out.println("B's constructor is invoked");
    }
}
4

3 に答える 3

3

Super は sub like の前にインスタンス化する必要がありますparent must exists before child

サブクラスの super(t) がその>スーパークラス(クラスB)で引数なしのコンストラクターを明示的に呼び出していることを理解しています

super(t)実際super(5)に呼び出しpublic B(int k)ます。存在しないもの
super()を呼び出してみてください。public B()

注:クラスで使用可能なコンストラクターがない場合、コンパイラーは引数なしのコンストラクターを提供します。

于 2013-01-10T05:22:13.863 に答える
1

サブクラスの super(t) は、そのスーパークラス (クラス B) で引数なしのコンストラクターを明示的に呼び出しています。

いいえ、super(t)と書き換えることができますB(t)。コードで示したコンストラクターを呼び出しています。

あなたが考えていることは

コンストラクターがスーパークラス コンストラクターを明示的に呼び出さない場合、Java コンパイラーはスーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。

http://docs.oracle.com/javase/tutorial/java/IandI/super.htmlから

つまり、コードが実行しなかった場合super(t)、デフォルトの引数なしのコンストラクターが呼び出されますが、

スーパー クラスに引数のないコンストラクタがない場合、コンパイル時エラーが発生します。

于 2013-01-10T05:22:08.943 に答える
1

あなたのクラスBには、引数なしのコンストラクターがありません (引数なしのコンストラクターになります)。ある場合は、 のコンストラクターによって自動的に呼び出されますAsuper(t)ただし、この例では、使用する引数を指定するために手動で呼び出す必要があります。

于 2013-01-10T05:27:38.270 に答える