1. ホーム
  2. java

[解決済み] Java コンストラクタ継承

2022-04-22 17:51:36

質問

javaではなぜコンストラクタが継承されないのでしょうか?このようなクラスがあるとします。

public class Super {

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

}

を継承した場合、その後に Super の場合、java はデフォルトのコンストラクタが定義されていないことを訴えます。解決策は当然、次のようなものです。

public class Son extends Super{

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

}

このコードは繰り返しが多く、DRYではなく、役に立たない(IMHO)...ということで、また疑問が湧いてきました。

なぜjavaはコンストラクタの継承をサポートしないのですか?この継承を認めないことによるメリットはあるのでしょうか?

解決方法は?

仮にコンストラクタ を継承した場合、すべてのクラスは最終的にObjectから派生することになります。 すべての クラスはパラメータなしのコンストラクタを持つことになります。それはまずい。いったい何を期待してるんだ。

FileInputStream stream = new FileInputStream();

を行うか?

現在、かなり一般的になっている "パススルー" コンストラクタを簡単に作成する方法があるはずですが、私はこれをデフォルトにすべきではないと考えています。サブクラスを構築するために必要なパラメータは、スーパークラスが必要とするパラメータとは異なることが多いからです。