关于多继承:为什么Java类只能扩展一个类但实现了许多接口?

why Java class can extends only one class but implements many interfaces?

本问题已经有最佳答案,请猛点这里访问。

在C++中,你可以扩展很多类,那么在爪哇中这个设计只能扩展一个类的优点是什么?既然接口是纯类(实际上是抽象类),为什么不像类扩展那样限制接口实现的数量呢?


只扩展一个基类是解决菱形问题的一种方法。这是一个问题,当一个类扩展两个基本类,两个基本类都实现相同的方法时,会发生这种问题-您如何知道要调用哪个基本类?

A.java:

1
2
3
public class A {
    public int getValue() { return 0; }
}

B.java:

1
2
3
public class B {
    public int getValue() { return 1; }
}

C.java:

1
2
3
4
5
public class C extends A, B {
    public int doStuff() {
        return super.getValue(); // Which superclass method is called?
    }
}

由于接口不能有实现,所以不会出现相同的问题。如果两个接口包含具有相同签名的方法,那么实际上只有一个方法,并且没有冲突。