1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】暗黙のスーパーコンストラクタPerson()が未定義である。明示的に別のコンストラクタを呼び出す必要がある?

2021-12-30 12:58:14

質問

Personクラスとstudentクラスがあり、Personクラスを実装し、インストラクター変数を与えようとしたところ、以下のようなコードになりました。

public class Person {
    public Person(String name, double DOB){

    }
}

public class Student extends Person {

    public Student(String Instructor) {

    }

}

実行すると、エラーが発生します。

implicit super constructor Person() is undefined. Must explicitly invoke another constructor

解決方法は?

<ブロッククオート

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

スーパークラスに引数なしのコンストラクタがない場合、コンパイル時エラーが発生します。Object にはそのようなコンストラクタがあるので、Object が唯一のスーパークラスであれば、問題はありません。

参考にしてください。 http://docs.oracle.com/javase/tutorial/java/IandI/super.html : (サブクラスコンストラクタ」セクション参照)

従って、パラメータ化されたコンストラクタを扱う場合は、常に super(parameter1, parameter2 ..) は親コンストラクタを呼び出します。 また、このsuper()の呼び出しは、コンストラクタ・ブロックの最初の行にする必要があります。