「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > コンストラクターでは常に「super()」を使用する必要がありますか?

コンストラクターでは常に「super()」を使用する必要がありますか?

2024 年 11 月 25 日に公開
ブラウズ:931

Should You Always Use `super()` in Constructors?

コンストラクター内の super() の存在はオプションですか?

オブジェクト指向プログラミングでは、派生クラスでコンストラクターを利用するのが一般的ですスーパークラスでコンストラクターを呼び出します。ただし、一部の開発者は、コンストラクター内で super() を明示的に指定する必要性を疑問視しています。

コンパイラーによる super() の自動呼び出し

Java コンパイラーは、サブクラス コンストラクターがスーパークラス コンストラクターを指定しない場合、スーパークラスのアクセス可能な引数なしのコンストラクター。これは、ほとんどの場合、super() の省略はプログラムの動作に影響を与えないことを意味します。

ルールの例外

ただし、場合によってはsuper() の明示的な呼び出しが必要な場合:

  • スーパークラスにアクセス可能な引数なしのクラスがない場合constructor.
  • サブクラス コンストラクターに引数があり、スーパークラスに引数を受け入れるコンストラクターがある場合。
  • サブクラス コンストラクターが、デフォルトの引数なし以外のスーパークラス内の特定のコンストラクターを呼び出す必要がある場合constructor.

次の存在下でのコンストラクターの使用法引数

サブクラス コンストラクターに引数がある場合、適切な引数をスーパークラス コンストラクターに渡すのはサブクラス コンストラクターの責任です。コンパイラは、明示的に指定しない限り、引数を指定してスーパークラス コンストラクターを自動的に呼び出しません。

次のコードを考えてみましょう:

public class Base {
    private Base() {}
}

public class Derived extends Base {
    public Derived(int i) {
        super(); // Call the default no-args constructor of Base
    }
}

この例では、Base には引数のないプライベート コンストラクターがあるため、Derived コンストラクターでの super() 呼び出しが不可欠です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3