在多种编程语言中,都会有父类子类的继承关系,但是多继承会存在如下的钻石问题。
来看看钻石:
假如A有一个接口,B,C都有自己的实现,那么继承B和C的D,D的实例赋值给A的引用调用这个接口该返回什么?
由于这种情况下类继承图的形状,它被称为“钻石问题”。在这种情况下,A类位于顶部,B和C分别位于其下方,D将两者连接在一起形成菱形。
对于Java类不支持多继承,所以不存在这样的问题,至于C++,这么写的时候好像是不能通过编译的。
但是在Java8之后,接口中引入了default和static方法,接口是支持多继承的,所以可能就会存在这样的问题,编译执行不报错,但结果不是很好理解。比如下面的示例,你觉得执行的是哪一个m方法呢?
当然按照菱形的我可以写个这样的
在每一个接口里面都有 default void show()方法,那么下面的将会输出什么?为什么是它?
参考:
https://www.quora.com/What-is-the-diamond-problem-in-programming
https://en.wikipedia.org/wiki/Multiple_inheritance