在C++中,您可以扩展多个类,那么Java中一个类只能继承一个类的设计有什么优势呢? 由于接口是一种纯粹的类(实际上是抽象类),为什么不像类扩展一样限制接口实现的数量呢?
在C++中,您可以扩展多个类,那么Java中一个类只能继承一个类的设计有什么优势呢? 由于接口是一种纯粹的类(实际上是抽象类),为什么不像类扩展一样限制接口实现的数量呢?
只能扩展一个基类是解决菱形继承问题的一种方法。当一个类扩展了两个都实现了同名方法的基类时,产生了该问题 - 如何知道应该调用哪个方法?
A.java:
public class A {
public int getValue() { return 0; }
}
B.java:
public class B {
public int getValue() { return 1; }
}
C.java:
public class C extends A, B {
public int doStuff() {
return super.getValue(); // Which superclass method is called?
}
}
由于接口不能有实现,因此就不会出现同样的问题。如果两个接口包含具有相同签名的方法,则实际上只有一个方法,仍然不存在冲突。
a()
的一个顺序和函数b()
的不同顺序,那么固定顺序就无法解决任何问题。 - Ted HoppC
并尝试在该对象上调用 getValue
,那么 C
的用户应该选择使用哪个超类?虽然这不是无法解决的问题,但每种解决方案(包括拒绝多重继承)都有其权衡。防止出现这种情况是 Java 使用的解决方案,是的,它也有其缺点。 - Chris Hayes