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