コンストラクターで `super()` が本当に必要なのはどのような場合ですか?

DDD
リリース: 2024-10-31 03:43:30
オリジナル
164 人が閲覧しました

 When is `super()` Really Necessary in a Constructor?

コンストラクターの Super(): 必要性の問題

オブジェクト指向プログラミングの領域では、コンストラクターは初期化において重要な役割を果たします新しく作成されたオブジェクト。ただし、サブクラスのコンストラクター内で super() メソッドを明示的に呼び出すことが不可欠ですか?

自動呼び出し

明示的な super( ) を呼び出すと、コンパイラーはスーパークラス内のアクセス可能な引数なしのコンストラクターを自動的に呼び出します。このコンストラクターにはパラメーターがなく、スーパークラスのインスタンス メンバーを適切に初期化するために不可欠です。

引数を持つコンストラクター

サブクラスのコンストラクターに引数が含まれる場合、通常は初期化タスクを委任します。一致する引数リストを持つスーパークラス内のコンストラクター。一致するコンストラクターが見つからない場合は、エラーが発生します。つまり、super() 経由で呼び出されるコンストラクターには、サブクラスのコンストラクターに渡される引数と正確に一致する引数が必要です。スーパークラスの args コンストラクターはサブクラスから見える必要があります。スーパークラス コンストラクターがプライベートまたは保護されている場合、正しいコンストラクターを呼び出すには、適切な引数を指定して super() を明示的に呼び出す必要があります。

これらの概念を説明するにはについては、次のコード スニペットを検討してください。

この場合、Derived のインスタンスが作成されると、Base のデフォルトのコンストラクターが自動的に呼び出されます。

ここで、コンストラクターはin Derived は、引数 i を使用して Base 内の一致するコンストラクターを明示的に呼び出します。

<code class="java">public class Base { // No-args constructor } public class Derived extends Base { // Default constructor will be invoked by the compiler }</code>
ログイン後にコピー

Base のコンストラクターはプライベートであり、サブクラスにアクセスできないため、このコードはエラーになります。

<code class="java">public class Base { public Base(int i) { } } public class Derived extends Base { public Derived(int i) { super(i); } }</code>
ログイン後にコピー
結論として、コンパイラーはスーパークラスでアクセス可能な引数なしのコンストラクターを自動的に呼び出しますが、サブクラスのコンストラクターに引数がある場合、またはスーパークラスのコンストラクターにアクセスできない場合は、明示的な super() 呼び出しが不可欠です。これらの微妙な違いを理解することは、Java でオブジェクトを適切に初期化するために非常に重要です。

以上がコンストラクターで `super()` が本当に必要なのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!