ホームページ > Java > &#&チュートリアル > Java がコンストラクターを継承しないのはなぜですか?

Java がコンストラクターを継承しないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-05 03:26:10
オリジナル
929 人が閲覧しました

Why Doesn't Java Inherit Constructors?

Java コンストラクターの継承: 謎を解く

Java では、クラスのコンストラクターはそのサブクラスに継承されません。この設計上の選択により、長年の疑問が生じました。なぜ Java はこのアプローチをとるのですか?

次のクラスについて考えてみましょう:

public class Super {

  public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    this.serviceA = serviceA;
    //etc
  } 

}
ログイン後にコピー

サブクラス Son が Super から継承する場合、Java は次のことを要求します。コンストラクターは、Super と同じパラメーターを使用して Son で明示的に宣言する必要があります。以下に示すように、これによりコードの繰り返しが発生する可能性があります。

public class Son extends Super{

  public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    super(serviceA,serviceB,serviceC);
  }

}
ログイン後にコピー

この繰り返しにより、Java はなぜコンストラクターの継承を禁止しているのですか?

その答えは、そのようなコードの潜在的な結果にあります。継承。コンストラクターが継承された場合、すべてのクラスは最終的に基本クラス Object からコンストラクターを継承します。これは、その目的に関係なく、すべてのクラスがパラメーターのないコンストラクターを持つことを意味します。

そのような設計では、あいまいさが生じます。たとえば、次のコード:

FileInputStream stream = new FileInputStream();
ログイン後にコピー

では、どのパラメータをコンストラクタに渡す必要があるかが疑問のままになります。クラスが異なれば必要なパラメーターも異なる可能性があり、そのような継承は非常に非現実的です。

パススルー コンストラクター (単にスーパークラス コンストラクターを呼び出すコンストラクター) が役立つシナリオもありますが、Java は賢明にもこれをデフォルトの動作にしないことを選択しました。 。サブクラスの構築にはさまざまなパラメーターが必要なので、各クラスでコンストラクターを明示的に宣言する必要があります。

以上がJava がコンストラクターを継承しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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