Java サブクラスでスーパークラス コンストラクターを明示的に呼び出す必要がありますか?
サブクラスを定義するとき、明示的に呼び出すコンストラクターを見るのが一般的です。 super() を使用するスーパークラス コンストラクター。ただし、これが必要かどうか疑問に思う人もいるかもしれません。
super() はコンパイラによって自動的に追加されますか?
はい、サブクラス コンストラクターがスーパークラスへの呼び出しを省略する場合は、コンストラクターを指定すると、コンパイラーはスーパークラス内のアクセス可能な引数なしのコンストラクター (引数なしのコンストラクター) を自動的に呼び出します。このデフォルトの動作は、コンストラクター チェーンと呼ばれます。
コンストラクターの種類
super() の場合必須?
super() の明示的な使用は次の場合にのみ必要です。
例 1:
public class Base {}
public class Derived extends Base {}
Base にはデフォルトのコンストラクターがあるため、super() への明示的な呼び出しは必要ありません。
例 2:
public class Base {
public Base(int i) {}
}
public class Derived extends Base {
public Derived(int i) {
super(i); // Explicitly call the Base(int) constructor
}
}
この場合、スーパークラスには引数なしのコンストラクターがなく、サブクラス コンストラクターは i パラメーターの初期値を提供する必要があるため、super(i) が必要です。
これらの概念を理解することで、不必要な super() 呼び出しを回避し、サブクラス内で適切なコンストラクター チェーンを確保できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3