我发现这个问题很难回答,因为答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴。

在 Java 中回答这种棘手问题的关键是准备好相关主题, 以应对后续的各种可能的问题。

这是非常经典的问题,与为什么 String 在 Java 中是不可变的很类似; 这两个问题之间的相似之处在于它们主要是由 Java 创作者的设计决策使然。

为什么Java不支持类多重继承, 可以考虑以下两点:

1、 第一个原因围绕钻石????形继承问题产生的歧义

考虑一个类 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 实现,现在 D 类使用多个继承派生自 B 和 C。

如果我们只引用 foo(), 编译器将无法决定它应该调用哪个 foo(),这也称为 Diamond 问题,因为这个继承方案的结构类似于菱形,见下图:

                A foo()      / \      /     \      foo() B     C foo()      \     /      \ /      D  foo()

即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。

嗯,在这种情况下,我会试着向他解释我下面给出的第二个原因,它不是因为技术难度, 而是更多的可维护和更清晰的设计是驱动因素, 虽然这只能由 Java 言语设计师确认,我们只是推测。

维基百科链接有一些很好的解释,说明在使用多重继承时,由于钻石问题,不同的语言地址问题是如何产生的。

2、对我来说第二个也是更有说服力的理由是,多重继承确实使设计复杂化并在强制转换构造函数链接等过程中产生问题。

假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。

此外,Java 可以通过使用接口支持多继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。

作者:Yujiaao
https://segmentfault.com/a/1190000019962661

公众号后台回复【2T】有惊喜礼包!

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享

为什么 Java 不支持类多重继承?相关推荐

  1. 【Java程序设计】类的重用

    类的重用 文章目录 类的重用 一.类的继承 (1)类继承的定义 (2)超类和子类 (3)继承的语法 (4)继承类型 (5)隐藏和覆盖 1.属性的隐藏 2.方法的覆盖 (6)子类的构造方法 二.Obje ...

  2. Java复习(四)类的重用

    4.1类的继承 Java只支持类的单继承,每一个子类只能有一个直接父类. #继承的语法 class childClass extends parentClass {//类体 } 子类不能直接访问从父类 ...

  3. 对Java的URL类支持的协议进行扩展的方法

    转载自   对Java的URL类支持的协议进行扩展的方法 JAVA默认提供了对file,ftp,gopher,http,https,jar,mailto,netdoc协议的支持.当我们要利用这些协议来 ...

  4. 为什么 Java 不支持运算符重载?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Yujiaao 来源 | https://se ...

  5. java中类与类的关系_Java中类与类的关系

    在java中类和类的关系大致分三种:泛化.关联.依赖. 1. 泛化(Generalization) "XX是一个XX"关系(is a),通常使用的关键词为 extends.impl ...

  6. Java语言所有异常类均继承自_Java将运行错误分为两类:(__)和(__), 其对应的类均派生自(__)类;...

    [单选题]设 x,y 均为已定义的类名,下列声明对象x1的语句中正确的是( ) [判断题]构造函数的方法名可以由编程人员任意命名. [单选题]能够实现对原文的鉴别和不可否认性的认证技术是( ). [单 ...

  7. JAVA继承类phone_【Java基础】类-----继承

    一.基本知识 1.在Java语言中,实现类的继承使用extends关键字 格式如下: [public] class SubClass extends SuperClass{ //类体的定义 } 2.被 ...

  8. java与C++不同之处(java不支持特性)

    java 不支持默认参数.(避免与重载混淆.) java 类没有析构函数.delete不是关键字.(垃圾自动回收机制) java 不支持操作符重载.所以对象比较只能老老实实实现comparable接口 ...

  9. Java学习手册:Java是否支持多继承?为什么?

    答案:不支持.(准确的说是:在Java中,类只支持单继承,而接口可以实现多继承.) James Gosling在1995年2月发表了一篇名为"Java概览"的Java白皮书,文章解 ...

  10. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

最新文章

  1. nginx负载均衡以及反向代理
  2. markdown转html
  3. Linux初到者五个最易犯的错误
  4. java流式传输对象_Java性能:面向教学与流式传输
  5. c判断数组是否为空_剑指offer编程题 1.二维数组中的查找
  6. 计算机丢失KTcontroller,无法识别Dell Perc H310 RAID控制器上的RAID驱动器
  7. java读取txt文件内容 乱码_java读取txt文件乱码解决方法
  8. 信息安全管理——网络安全监管
  9. 根据用户IP精确定位推送消息
  10. matlab插值计算
  11. python list 元素位置,怎么查找python列表中元素的位置
  12. [转]30个总结JVM虚拟机的技术文排版好(收藏版)
  13. 获取webservice(wsdl)数据包
  14. MMX、SSE、AVX等SIMD指令集说明
  15. 全方位的技术服务及相关技术解决方案(纯java解决方案)
  16. 脚手架开发(2)-注册阶段
  17. NCL计算混合比或比湿的函数
  18. vue3实现单点登录
  19. C#表格table时间显示年月日时分秒格式设置
  20. 黄色简约述职报告工作总结PPT模板

热门文章

  1. What?什么是区块链?你不知道就太low了
  2. Docker容器运行GUI程序的配置方法
  3. Debug gradle task
  4. 为什么Linux不需要磁盘碎片整理
  5. nagios 流量监控和报警的shell脚本
  6. 用TMG搭建×××服务器(二)---L2TP/IPsec ×××
  7. 一个硕士是怎样发表5篇SCI的
  8. 「leetcode」738.单调递增的数字【贪心算法】详细讲解!
  9. 「Leetcode」707.设计链表:一道题目考察了常见的五个操作!
  10. 如何在mac中使用downie下载视频?