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

Mary-Kate Olsen
リリース: 2024-10-31 02:50:02
オリジナル
949 人が閲覧しました

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

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

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

スーパークラスはコンパイラによって自動的に追加されますか?

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

コンストラクターの種類

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

の場合、super( ) 必須ですか?

super() の明示的な使用は、次の場合にのみ必要です。

  • スーパークラスにアクセス可能な引数なしのコンストラクターがない。
  • サブクラス コンストラクターにはパラメーターが含まれます。その場合、それらのパラメーターを受け入れるスーパークラスのコンストラクターを明示的に呼び出す必要があります。

例 1:

<code class="java">public class Base {}
public class Derived extends Base {}</code>
ログイン後にコピー

いいえBase にはデフォルトのコンストラクターがあるため、super() への明示的な呼び出しが必要です。

例 2:

<code class="java">public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}</code>
ログイン後にコピー

この場合、super(i) が必要です。スーパークラスには引数のないコンストラクターがありません。サブクラス コンストラクターは、その i パラメーターに初期値を提供する必要があります。

これらの概念を理解することで、不必要な super() 呼び出しを回避し、適切なコンストラクター チェーンを確保できます。サブクラス内。

以上がJava サブクラスは常にスーパークラス コンストラクターを明示的に呼び出す必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート