Javaのコンストラクタの継承における問題を解決する方法
Javaでは、サブクラスは親クラスのコンストラクタをデフォルトで継承しますが、サブクラスは親クラスのコンストラクタを直接呼び出すことはできません。この問題を解決するには、superキーワードを使用して親クラスのコンストラクタを呼び出す必要があります。
サブクラスのコンストラクタでは、super キーワードを使って親クラスのコンストラクタを呼び出すことができます。super キーワードはサブクラスのコンストラクタの 1 行目に配置する必要があり、親クラスのコンストラクタを呼び出します。
例えば:
public class Parent {
public Parent(int x) {
// 父类构造函数
}
}
public class Child extends Parent {
public Child(int x) {
super(x); // 调用父类的构造函数
// 子类构造函数
}
}
サブクラスのコンストラクタ内でsuper()を呼び出して親クラスのコンストラクタを実行すると、親クラスのインスタンス変数を子クラスオブジェクトの生成時に初期化するために、親クラスのコンストラクタに引数を渡すことができます。
サブクラスのコンストラクタが親クラスのコンストラクタを明示的に呼び出さないと、コンパイラはサブクラスのコンストラクタにsuper()文を挿入して親クラスの無引数コンストラクタを呼び出します。ただし、親クラスに無引数コンストラクタがない場合、または親クラスの無引数コンストラクタがプライベートの場合、コンパイラはエラーを出力します。
Javaではコンストラクタの継承はsuperキーワードで親クラスのコンストラクタを呼び出すことで実現される