作者: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 不支持类多重继承?相关推荐

  1. java 的继承_关于java中的继承

    我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...

  2. java getclass() 继承_【java】继承和super.getClass()

    一.先看问题 question:输出的结果是什么? package cn.wxy.extendsion; /** * 父类 * @author reliveIT */ public class Fat ...

  3. 学JAVA的诗句_学Java有感(终)

    大一的下半学期逐渐步入尾声,我的Java学习也以告一段落.经过一个学期的学习,不能说是融会贯通,但也算小有心得.下面就来谈谈我对这个学期Java学习的感受吧! 在大一的上半学期,我接触到了一个计算机语 ...

  4. java instanceof 继承_继承_instanceOf的使用

    本阶段是进入"程序员"的门槛,需要学习编程8yt基本的知识:变量.数据类型.控制 语句.面向对象.我们通过实际的案例,让大家一开始就通过游戏项目进入学习状态,寓教 于乐,引起大家的 ...

  5. java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...

    关于java子类继承来的属性与方法究竟是完全复制还是共用使用 关于java子类继承来的属性与方法究竟是完全复制还是共用使用 今天在学习java的面向对象时,无意间发现一个问题. public clas ...

  6. java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态

    1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...

  7. java画笑脸_用java编写一个颜色为红色,粗线型的笑脸和哭脸,需要继承JFrame类,用java中的绘制图形做...

    展开全部 /* * Copyright (c) cherry  Co. Ltd. * All right reserved. */ package com.cherry.swing; import j ...

  8. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  9. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

  10. java applet配置_配置Java Applet的运行环境

    Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本地安装了JDK,指定好JAV ...

最新文章

  1. django中的for循环_深入了解 JavaScript 中的 for 循环
  2. poj-1159 Palindrome **
  3. 上拉电阻和下拉电阻的作用详解
  4. Tensorflow实现MNIST数据自编码(3)
  5. Property or field 'username' cannot be found on null
  6. Spring Boot(一)—— Spring Boot 入门
  7. graphics 位深度_热门上海乐家人才公寓深度解析又是一个神
  8. TrueNAS Enterprise是什么
  9. 中国首张5G电话卡推出,DMA基金会持续为5G助力。
  10. js限制文本框只能输入数字方法小结(转)
  11. mac乱码 飞秋_ubuntu 下安装 dukto
  12. 微型计算机原理及应用考试重点,微型计算机原理及应用考试重点.doc
  13. JavaScript表单验证年龄
  14. 思科CCNA认证视频 CCNA视频 ccna最新题库 专题 复习资料
  15. 硬盘分区MBR与GPT
  16. systrace 基本使用
  17. 完美解决Excel复制后粘贴空白的问题
  18. Lighttools中模拟白光LED
  19. 无忧看片,Python黑科技神奇去除马赛克
  20. python duplicated函数_16、pandas的duplicated和drop_duplicaates函数

热门文章

  1. 枚举类型的定义和应用
  2. 关于onclick中的event对象和element对象
  3. 89C52定时/计数器
  4. 【LeetCode】【数组】题号:*304,二维区域和检索
  5. JS学习总结(14)——Events事件
  6. 阿里云服务器部署GeoServer以及跨域处理
  7. 错误使用 xlim (line 31) 范围必须为包含递增的日期时间值的 2 元素向量
  8. Log4j框架配置文件log4j.properties配置使用详解
  9. Flink 1.11 Unaligned Checkpoint 解析
  10. 在 Flink 算子中使用多线程如何保证不丢数据?