この場合、コンパイルが失敗するのはなぜですか?
これは何が起こったのですか?Employee
:呼び出しのコンストラクタ、default constructor of Person
それだけです。
この場合、コンパイルが失敗するのはなぜですか?
これは何が起こったのですか?Employee
:呼び出しのコンストラクタ、default constructor of Person
それだけです。
スーパークラス コンストラクターには引数なしのデフォルト コンストラクターが定義されていないため、サブクラス コンストラクターからスーパークラスの 1-args コンストラクターを明示的に呼び出す必要があります。したがって、答えは18行目のDコンパイルエラーです
コードを修正するには:
public Employee(String id){
super("pass person name");
//rest of the code
}
Person にはデフォルトのコンストラクターがあると想定していると思います。宣言されたコンストラクターがない場合、コンパイラーはデフォルトのコンストラクターのみを挿入します。Person に引数なしのコンストラクターを持たせたい場合は、それを宣言する必要があります。
Employee を作成するときは、Person でコンストラクタを呼び出す必要があります。既定では、コンパイラは既定のコンストラクターを (引数なしで) 呼び出しますが、この場合、Person には存在しません (コンパイラーは、他のコンストラクターが存在しない場合にのみ既定のコンストラクターを作成します)。
Employee コンストラクターの最初の行で Person の具体的なコンストラクターを呼び出すか、Person で既定のコンストラクターを定義する必要があります。