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

Bin*_*Bin 4 java multiple-inheritance

在C++中,您可以扩展许多类,那么这个Java设计的优点是什么类只能扩展一个类?由于接口是一种纯类(实际上是抽象类),为什么不像类扩展一样限制接口的实现数量呢?

Chr*_*yes 20

能够仅扩展一个基类是解决钻石问题的一种方法.当一个类扩展两个实现相同方法的基类时,会出现这个问题 - 你怎么知道调用哪一个?

A.java:

public class A {
    public int getValue() { return 0; }
}
Run Code Online (Sandbox Code Playgroud)

B.java:

public class B {
    public int getValue() { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

C.java:

public class C extends A, B {
    public int doStuff() { 
        return super.getValue(); // Which superclass method is called?
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我也在维基百科上看到了......但我并不完全满意。有一些示例,通过按特定顺序处理方法继承来解决菱形问题(因此 C 首先获取 B 的方法,然后获取 A)。 (2认同)