需要更合理的答案"为什么Java没有多重继承"

Jus*_*per 3 java

可能重复:
为什么Java中没有多重继承,但允许实现多个接口

到目前为止,我所看到的关于"为什么Java没有多重继承"的每个答案只有一个答案,更具体或更详细的方式是"降低复杂性",但没有人定义它如何降低复杂性,如果我们使用接口而不是类什么它有所不同.这不是一回事吗?如果我们实现一个接口而不扩展我们的类有什么区别?有人回答了Diamond问题,但接口也会产生钻石问题.

das*_*ght 6

接口与类之间的多重继承之间的区别在于您必须继承实现.通过多个路径继承方法接口时,可以说实现类必须实现继承的方法.从多个类继承时,必须决定选择哪几个实现.这会极大地增加语言的复杂性,您可以通过检查在C++中实现多重继承的方式来看到.

这是一个例子:

public class Base {
    public void foo() {System.out.println("base");}
}
public class A extends Base {
    public void foo() {System.out.println("a");}
}
public class B extends Base {
    public void foo() {System.out.println("b");}
}
public class AB extends A, B /* imagine that it's a possibility */{
}
Run Code Online (Sandbox Code Playgroud)

你这样做会发生什么?

AB ab = new AB();
ab.foo();
Run Code Online (Sandbox Code Playgroud)

随着接口的继承,AB将不得不实现foo; 继承实现后,语言需要决定,或者为您提供一种自己指定的方法.无论如何,复杂性将会增长.