java多继承_为什么 Java 不支持类多重继承?
作者:Yujiaao
https://segmentfault.com/a/1190000019962661
我发现这个问题很难回答,因为答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴。
在 Java 中回答这种棘手问题的关键是准备好相关主题, 以应对后续的各种可能的问题。
这是非常经典的问题,与为什么 String 在 Java 中是不可变的很类似; 这两个问题之间的相似之处在于它们主要是由 Java 创作者的设计决策使然。
为什么Java不支持类多重继承, 可以考虑以下两点:
1、 第一个原因围绕钻石形继承问题产生的歧义
考虑一个类 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 实现,现在 D 类使用多个继承派生自 B 和 C。
如果我们只引用 foo(), 编译器将无法决定它应该调用哪个 foo(),这也称为 Diamond 问题,因为这个继承方案的结构类似于菱形,见下图:
即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。
嗯,在这种情况下,我会试着向他解释我下面给出的第二个原因,它不是因为技术难度, 而是更多的可维护和更清晰的设计是驱动因素, 虽然这只能由 Java 言语设计师确认,我们只是推测。
维基百科链接有一些很好的解释,说明在使用多重继承时,由于钻石问题,不同的语言地址问题是如何产生的。
2、对我来说第二个也是更有说服力的理由是,多重继承确实使设计复杂化并在强制转换、构造函数链接等过程中产生问题。
假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。
此外,Java 可以通过使用接口支持多继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。
java多继承_为什么 Java 不支持类多重继承?相关推荐
- java 的继承_关于java中的继承
我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...
- java getclass() 继承_【java】继承和super.getClass()
一.先看问题 question:输出的结果是什么? package cn.wxy.extendsion; /** * 父类 * @author reliveIT */ public class Fat ...
- 学JAVA的诗句_学Java有感(终)
大一的下半学期逐渐步入尾声,我的Java学习也以告一段落.经过一个学期的学习,不能说是融会贯通,但也算小有心得.下面就来谈谈我对这个学期Java学习的感受吧! 在大一的上半学期,我接触到了一个计算机语 ...
- java instanceof 继承_继承_instanceOf的使用
本阶段是进入"程序员"的门槛,需要学习编程8yt基本的知识:变量.数据类型.控制 语句.面向对象.我们通过实际的案例,让大家一开始就通过游戏项目进入学习状态,寓教 于乐,引起大家的 ...
- java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...
关于java子类继承来的属性与方法究竟是完全复制还是共用使用 关于java子类继承来的属性与方法究竟是完全复制还是共用使用 今天在学习java的面向对象时,无意间发现一个问题. public clas ...
- java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态
1. 什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...
- java画笑脸_用java编写一个颜色为红色,粗线型的笑脸和哭脸,需要继承JFrame类,用java中的绘制图形做...
展开全部 /* * Copyright (c) cherry Co. Ltd. * All right reserved. */ package com.cherry.swing; import j ...
- java 字符串包_包java字符串
Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...
- java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !
" 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...
- java applet配置_配置Java Applet的运行环境
Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本地安装了JDK,指定好JAV ...
最新文章
- django中的for循环_深入了解 JavaScript 中的 for 循环
- poj-1159 Palindrome **
- 上拉电阻和下拉电阻的作用详解
- Tensorflow实现MNIST数据自编码(3)
- Property or field 'username' cannot be found on null
- Spring Boot(一)—— Spring Boot 入门
- graphics 位深度_热门上海乐家人才公寓深度解析又是一个神
- TrueNAS Enterprise是什么
- 中国首张5G电话卡推出,DMA基金会持续为5G助力。
- js限制文本框只能输入数字方法小结(转)
- mac乱码 飞秋_ubuntu 下安装 dukto
- 微型计算机原理及应用考试重点,微型计算机原理及应用考试重点.doc
- JavaScript表单验证年龄
- 思科CCNA认证视频 CCNA视频 ccna最新题库 专题 复习资料
- 硬盘分区MBR与GPT
- systrace 基本使用
- 完美解决Excel复制后粘贴空白的问题
- Lighttools中模拟白光LED
- 无忧看片,Python黑科技神奇去除马赛克
- python duplicated函数_16、pandas的duplicated和drop_duplicaates函数