2

私はJavaを学んでいます。私が読んでいる本には、次のコードの何が問題になっているのかを尋ねる質問があります。NetBeansにコードを入力しましたが、エラーが表示されますが、なぜこのエラーが発生し、どのように解決されるのですか?

エラーはコード上で強調表示されpublic A(int t)

クラスBのコンストラクターBは、指定された型に適用できません。intが必要で、引数が見つかりません。実際の引数リストと正式な引数リストの長さが異なる理由。

コードは次のとおりです。

public class Test {
    public static void main(String[] args) {
       B b = new B(5);
    }
}

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

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

4 に答える 4

4

引数のないコンストラクターがあり、ない場合は、サブクラスのコンストラクターからの呼び出しを使用して明示的に呼び出す必要がsuper classありますargs constructorsuper(args)

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

}
于 2013-01-10T00:52:39.457 に答える
1

クラス B にはコンストラクターが定義されているため、パブリックの暗黙的な既定のコンストラクター (引数なし) はありません。super(t)ゼロ引数のスーパークラス コンストラクターが使用できない場合、すべてのサブクラス コンストラクターは、 を介してスーパークラス コンストラクターを明示的に呼び出す必要があります。

于 2013-01-10T00:54:38.277 に答える
1

クラス B には、int引数を取るコンストラクタが 1 つだけあります。一方、クラス A にあるコンストラクターは (暗黙的に)、引数を取らない A のスーパークラス (つまり B) のコンストラクターを呼び出そうとします。これがエラーの原因です。この問題を解決するには、少なくとも 2 つの方法があります。

  1. クラス B に引数なしのコンストラクターを作成します。

  2. int をパラメーターとして受け取るクラス B のコンストラクターを明示的に呼び出します。superキーワードを使用してこれを行うことができます。

于 2013-01-10T00:55:20.230 に答える
1

の最初のステートメントとして、スーパー クラスのコンストラクターを呼び出す必要がありますA(int)

public A(int t)  {
   super(t);
   System.out.println("A's constructor is invoked");
}
于 2013-01-10T00:52:20.217 に答える