为什么 Java 不支持类多重继承?
我发现这个问题很难回答,因为答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴。
在 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 不支持类多重继承?相关推荐
- 【Java程序设计】类的重用
类的重用 文章目录 类的重用 一.类的继承 (1)类继承的定义 (2)超类和子类 (3)继承的语法 (4)继承类型 (5)隐藏和覆盖 1.属性的隐藏 2.方法的覆盖 (6)子类的构造方法 二.Obje ...
- Java复习(四)类的重用
4.1类的继承 Java只支持类的单继承,每一个子类只能有一个直接父类. #继承的语法 class childClass extends parentClass {//类体 } 子类不能直接访问从父类 ...
- 对Java的URL类支持的协议进行扩展的方法
转载自 对Java的URL类支持的协议进行扩展的方法 JAVA默认提供了对file,ftp,gopher,http,https,jar,mailto,netdoc协议的支持.当我们要利用这些协议来 ...
- 为什么 Java 不支持运算符重载?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Yujiaao 来源 | https://se ...
- java中类与类的关系_Java中类与类的关系
在java中类和类的关系大致分三种:泛化.关联.依赖. 1. 泛化(Generalization) "XX是一个XX"关系(is a),通常使用的关键词为 extends.impl ...
- Java语言所有异常类均继承自_Java将运行错误分为两类:(__)和(__), 其对应的类均派生自(__)类;...
[单选题]设 x,y 均为已定义的类名,下列声明对象x1的语句中正确的是( ) [判断题]构造函数的方法名可以由编程人员任意命名. [单选题]能够实现对原文的鉴别和不可否认性的认证技术是( ). [单 ...
- JAVA继承类phone_【Java基础】类-----继承
一.基本知识 1.在Java语言中,实现类的继承使用extends关键字 格式如下: [public] class SubClass extends SuperClass{ //类体的定义 } 2.被 ...
- java与C++不同之处(java不支持特性)
java 不支持默认参数.(避免与重载混淆.) java 类没有析构函数.delete不是关键字.(垃圾自动回收机制) java 不支持操作符重载.所以对象比较只能老老实实实现comparable接口 ...
- Java学习手册:Java是否支持多继承?为什么?
答案:不支持.(准确的说是:在Java中,类只支持单继承,而接口可以实现多继承.) James Gosling在1995年2月发表了一篇名为"Java概览"的Java白皮书,文章解 ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
最新文章
- nginx负载均衡以及反向代理
- markdown转html
- Linux初到者五个最易犯的错误
- java流式传输对象_Java性能:面向教学与流式传输
- c判断数组是否为空_剑指offer编程题 1.二维数组中的查找
- 计算机丢失KTcontroller,无法识别Dell Perc H310 RAID控制器上的RAID驱动器
- java读取txt文件内容 乱码_java读取txt文件乱码解决方法
- 信息安全管理——网络安全监管
- 根据用户IP精确定位推送消息
- matlab插值计算
- python list 元素位置,怎么查找python列表中元素的位置
- [转]30个总结JVM虚拟机的技术文排版好(收藏版)
- 获取webservice(wsdl)数据包
- MMX、SSE、AVX等SIMD指令集说明
- 全方位的技术服务及相关技术解决方案(纯java解决方案)
- 脚手架开发(2)-注册阶段
- NCL计算混合比或比湿的函数
- vue3实现单点登录
- C#表格table时间显示年月日时分秒格式设置
- 黄色简约述职报告工作总结PPT模板