17

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

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

4

4 に答える 4

28

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 以降、インターフェイスでデフォルト メソッドを使用できるようになりました。

于 2010-01-09T00:44:26.677 に答える
26

簡単な答え: できません。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();
  }

  ...
}
于 2010-01-09T00:31:49.223 に答える
3

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

于 2010-01-09T00:32:13.933 に答える
2

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

于 2010-01-09T00:31:54.853 に答える