Java中如何从多个基类继承?

17

可能的重复问题:https://dev59.com/XkjSa4cB1Zd3GeqPI9hd,https://dev59.com/4nNA5IYBdhLWcg3wPbSe,https://dev59.com/bHNA5IYBdhLWcg3wWseK,https://dev59.com/tUXRa4cB1Zd3GeqPpSVw等等。 - Pascal Thivent
那些其他问题在我看来并不是重复的。那些问题问的是为什么没有多重继承。而这个问题则是询问如何规避它,提供了其他问题没有提供的合适答案。 - Dave
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 开始,接口中可以使用默认方法(Default Methods)


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();
  }

  ...
}

3

Java不支持多重继承,因此您无法使用它。但是,您可以使用组合来实现相同的效果。


2

Java明确禁止多重实现继承。因此,你只能使用接口和组合来达到类似的效果。


这是Laurence提供的一个很好的例子 :) - Rob Oxspring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接