Parent
まず、子クラス ( ) をインスタンス化するために親インスタンス ( ) を作成する必要はありませんEmployee
。あなたは間違った理解をしているに違いない。
親クラスのコンストラクターを呼び出すことは、新しい親インスタンス オブジェクトを作成することを意味しません ( で呼び出していないnew
ため、新しいインスタンスは作成されません)。子インスタンスを作成しています。このためには、継承のため、最初に親のコンストラクターを呼び出す必要があります。たとえば、親クラスprivate
に、コンストラクターで初期化する必要があるフィールド (private final
フィールドなど) があるとします。このフィールドは子クラスからアクセスできませんが、親クラスのコンストラクターから初期化できます。子インスタンスでこのフィールドを初期化する必要があり、唯一の方法は を呼び出すことsuper()
です。
この場合Person
、デフォルトで呼び出されるデフォルトのコンストラクターがあり、明示的に呼び出す必要はありません。
ただし、Person
デフォルトのコンストラクターがない場合は、明示的に呼び出す必要があります。例えば:
public class Person{
private final String name;
public Person(final String name) {
this.name = name;
}
}
public class Employee extends Person {
public Employee() {
}
}
これはコンパイルされません。コンストラクターを明示的Employee
に呼び出すように変更する必要があります。Person
例えば:
public class Employee extends Person {
public Employee(final String name) {
super(name);
}
}