「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java サブクラスは常にスーパークラス コンストラクターを明示的に呼び出す必要がありますか?

Java サブクラスは常にスーパークラス コンストラクターを明示的に呼び出す必要がありますか?

2024 年 11 月 9 日に公開
ブラウズ:506

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

Java サブクラスでスーパークラス コンストラクターを明示的に呼び出す必要がありますか?

サブクラスを定義するとき、明示的に呼び出すコンストラクターを見るのが一般的です。 super() を使用するスーパークラス コンストラクター。ただし、これが必要かどうか疑問に思う人もいるかもしれません。

super() はコンパイラによって自動的に追加されますか?

はい、サブクラス コンストラクターがスーパークラスへの呼び出しを省略する場合は、コンストラクターを指定すると、コンパイラーはスーパークラス内のアクセス可能な引数なしのコンストラクター (引数なしのコンストラクター) を自動的に呼び出します。このデフォルトの動作は、コンストラクター チェーンと呼ばれます。

コンストラクターの種類

  • 引数なしコンストラクター:パラメーターのないコンストラクター。
  • 引数なしでアクセス可能constructor: サブクラス (public、protected、または package-private) から見えるスーパークラス内の引数なしのコンストラクター。
  • デフォルトのコンストラクター: 引数なしのパブリッククラスに明示的なコンストラクターがない場合にコンパイラによって追加されるコンストラクター。

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