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

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

来看看钻石:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值