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

来看看钻石:

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

Java接口default方法思考钻石问题相关推荐

  1. Java 接口作为方法参数

    一'Java 接口作为方法参数好处: 1 可以很方便封装起来,供调用者使用: 2 参数为接口类型可以实现代码解耦: 3 对调用者而言, 无需关心内部构造逻辑 , 只要实现调用相关方法 实现自己的下部逻 ...

  2. java函数式编程之接口Default方法五

    2019独角兽企业重金招聘Python工程师标准>>> 之前看一段java8的代码,发现接口都可以实现方法了,当然在老的教程里面是会告诉我们接口只是定义了方法的,为什么Java8要这 ...

  3. [转载] java接口中方法的默认访问修饰符为public

    参考链接: Java接口方法 如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是?  ( ) A.void use() { -} B.prot ...

  4. java——接口作为方法的参数和返回值

    接口作为方法的参数和返回值 package cn.itcast.day11.demo07;import java.util.ArrayList; import java.util.List; /* j ...

  5. java接口中方法声明_java – 使用实现中声明的接口中未定义的方法

    我有一个由接口定义的类 public interface Test { void testMethod(); } Test test = new TestImpl(); public class Te ...

  6. java批量删除接口怎么定义_教你在Java接口中定义方法

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...

  7. java 二义性_Java接口默认方法带来的问题分析【二义性问题】

    本文实例分析了Java接口默认方法带来的问题.分享给大家供大家参考,具体如下: 一 点睛 Java 8中,如果一个类实现两个或多个接口,即"变相"的多继承,但是若其中两个接口都包含 ...

  8. java 代码 二义性是什么_Java接口默认方法带来的问题分析【二义性问题】

    本文实例分析了Java接口默认方法带来的问题.分享给大家供大家参考,具体如下: 一 点睛 Java 8中,如果一个类实现两个或多个接口,即"变相"的多继承,但是若其中两个接口都包含 ...

  9. Android 接口的default 方法运行时报错AbstractMethodError

    [问题描述:接口default方法AbstractMethodError] 记录一个Android项目中遇到的问题,我们通过exclude方式重写了一个依赖,改用本地的实现,其中一个接口的defaul ...

最新文章

  1. python去除英文字符中的数字和标点符号
  2. c语言考试长沙理工大学,2013年长沙理工大学C语言考试试卷A.doc
  3. python turtle 椭圆_【python turtle如何画椭圆】
  4. SQL性能第1篇:关系优化
  5. 什么软件可以测试电脑硬件兼容性,Windows 7常用48款软件兼容性测试
  6. 数据加载中,请稍等......
  7. 1. rc 目录结构
  8. memcached全面剖析–5. memcached的应用和兼容程序
  9. 读书笔记-集体智慧编程
  10. 闪迪内存卡软件测试,闪迪存储卡怎么样
  11. gmp计算机分类,GMP附录——计算机化系统汇总.pptx
  12. Teclast/台电32G SM3267AC H27UDG8M2MTR 量产记录
  13. 科学研究的方法-笔记01-如何提出科学研究问题
  14. Windows Server 2008 R2中Windows Server Backup功能之备份、恢复
  15. 【自动驾驶】【小障碍物感知】
  16. 一阶IIR数字滤波器的设计
  17. 高德地图 点击获取坐标
  18. 解决访问远程共享时发生 请检查名称的拼写. 否则, 网络可能有问题 故障
  19. Python神笔马良案例集简介
  20. android的多渠道打包,Android美团多渠道打包Walle集成

热门文章

  1. 公司新办公楼休息间能看到富士山了
  2. 数据库一些开发者了解的操作
  3. expect免互交 常用编辑文本
  4. SQL批量更新 关系表更新
  5. 关键字nullable,nonnull,null_resettable,_Null_unspecified详解
  6. java并发编程(二)synchronized
  7. 通过一个月时间字段分组
  8. 用Java实现非阻塞通信
  9. 让不同的库元件继承自共同的类
  10. EnterpriseLibrary 介绍