web-dev-qa-db-ja.com

Javaで複数の基本クラスから継承する方法は?

重複の可能性:
Java !! で単一継承をチート
JavaまたはC#? で多重継承が許可されないのはなぜですか?)
Javaでの多重継承

インターフェイスを使用して複数のクラスから継承できることは知っていますが、状態を継承することもできますか?
2つのクラスから定義を持つメソッドを継承し、Javaの3番目のクラスにそれらを含めるにはどうすればよいですか?

16
Anonymous

Javaでは多重継承は許可されていません。代わりにデリゲートとインターフェースを使用する

public interface AInterface {
        public void a();
}
public interface BInterface {
    public void b();
}

public class A implements AInterface {
    public void a() {}
}
public class B implements BInterface {
    public void b() {}
}

public class C implements AInterface, BInterface {
    private A a;
    private B b;

    public void a() {
        a.a();
    }
    public void b() {
        b.b();
    }
}

Java 8なので、インターフェイスで デフォルトのメソッド を使用できます。

27
Fabiano

簡単な答え:できません。 Javaにはインターフェースの多重継承のみがあります。

少し長い答え:気になるメソッドがインターフェイスにあることを確認すると、インターフェイスを実装するクラスを作成して、「スーパークラス」のインスタンスに委任できます。

interface Noisy {
  void makeNoise();
}


interface Vehicle {
  void go(int distance);
}

class Truck implements Vehicle {
  ...
}

class Siren implements Noisy {
  ...
}

class Ambulance extends Truck implements Noisy {
  private Siren siren = new Siren();

  public makeNoise() {
    siren.makeNoise();
  }

  ...
}
25

Javaは多重継承をサポートしていません。できることは合成です。

3
albertein

Javaは、実装の多重継承を明示的に禁止しています。同様の結果を達成するために、インターフェースと構成を使用する必要があります。

2
Rob Oxspring