为什么钻石是死亡而不是死亡的三角形

gru*_*erd 9 inheritance design-patterns multiple-inheritance

我已经看过很多例子来说明多重继承的危险性.

该示例通常类似于B类,C扩展A类,D类扩展B和C.

B和C都覆盖了A的方法,例如equals();

然后调用D.equals(); 它不知道应该调用其父项中的哪一个

前提是在D中不覆盖equals()

从我所看到的,这个例子中的A类不是多余的吗?如果我们从这个层次结构中删除A并且只看B和C,如果B和C都有名为equals()的方法,那么当D扩展B和C时,它仍然会有同样的问题,所以它不是真的死亡三角?

我不确定我所假设的是否会导致其他语言的编译时错误.

希望有人能为我澄清一下.

Gri*_*aub 2

如果D extends B and Cand not 覆盖在 B 和 C 中实现的方法equals(),则没有歧义 - D 可以使用B.equals()or C.equals()

另一方面,对于菱形结构,如果 D 调用A.equals()并且 B 和 C 都覆盖它,您不知道应该调用哪个方法B.equals()C.equals()