Java接口default方法思考钻石问题

在多种编程语言中,都会有父类子类的继承关系,可是多继承会存在以下的钻石问题。编程

来看看钻石:编程语言

假如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

相关文章
相关标签/搜索