翻译自 John Demetriou 2018年4月8日 的文章 《Multiple Inheritance And The Diamond Problem》[1]

开篇之前,我假设每个人都知道在面向对象编程中继承是什么,以及它能提供什么好处。我不会深入探究对象继承的基础知识。这篇文章更关注于多重继承和它所面临的问题。

确实如此,多重继承的一个大问题就是菱形问题。你可能会问为什么?想象一下继承的分布如下:

上面的图显示,D 继承自 BC,而 BC 继承自 A

现在假设 A 是一个抽象类(菱形问题的存在不必是抽象类,但它使问题更明显),并且包含一个名为 Jump() 的公共抽象方法(public abstract Jump())。BC 都需要以自己特定的方式实现该方法。然后 D 继承自这两个类,当有人在 D 上调用 Jump() 时会发生什么?
调用 Jump() 的哪一个实现是不明确的!

就是由于这个原因,Java 和 C# 都不允许多重继承。不过它们允许多接口继承,并且 C# 的一个新特性将接口与多继承问题联系起来[2]。我们将在下一篇中讨论这一特性。

作者 : John Demetriou
译者 : 技术译民
出品 : 技术译站
链接 : 英文原文

参考

  1. ^Multiple Inheritance And The Diamond Problem http://www.devsanon.com/language-agnostic/multiple-inheritance-and-the-diamond-problem/
  2. ^C# 8: 默认接口方法 https://mp.weixin.qq.com/s/UaWxZHeYh4OQByNlyYX0cg

多重继承_多重继承和菱形问题相关推荐

  1. pythonsuper多重继承_小白都能理解的Python多继承

    前言 本文主要做科普用,在真实编程中不建议使用多重继承,或者少用多重继承,避免使代码难以理解. 方法解析顺序(MRO) 关于多重继承,比较重要的是它的方法解析顺序(可以理解为类的搜索顺序),即MRO. ...

  2. 抽象类继承多个抽象类_多重继承?抽象类?C++的内存布局并不复杂

    多重继承 先来看看多重继承吧 class 先来看构造函数 ...... 001917DD pop ecx 001917FC mov ecx,dword ptr [this] ;取出this指针 001 ...

  3. python多重继承super父类参数_多重继承如何处理super()和不同的参数?

    我正在深入研究一些更高级的python主题(至少对我来说是高级的).我正在阅读有关多重继承和如何使用super()的内容.我或多或少理解超级函数的使用方式,但这样做有什么不对?以下内容:class F ...

  4. python super 多重继承_解决python super()调用多重继承函数的问题

    当类间继承关系很简单时,super()的使用很简单. class A(object): def __init__(self): print('a') class B(A): def __init__( ...

  5. 计算宝宝帐户收益(多重继承)_【067】遗漏因子、缺失数据与多重检验

    1. 简介 多重检验问题早已在统计学和金融界受到广泛的关注.在金融研究中,最广为人知的应用当属 Barras, Scaillet, and Wermers (2010). 三位作者将错误发现率(fal ...

  6. pythonsuper多重继承_Python多重继承引发的问题——牛逼的super

    少说废话多做事先上一个图,此图用win7下的画图工具所画,当然,这不是重点 需要清楚的一个事情是: 任何类,都默认并隐式的继承object类(根类),在上面的图中,Transformers类同时继承了 ...

  7. php实现多重继承,PHP5 多重继承DEMO方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 突然想起PHP4好象不能多重继承~~无聊之下测试了PHP5的!其实实现也很简单!对于一个会JAVA的开发者!呵呵 以下为例子程序 //PHP5 接口 -- ...

  8. python多重继承_Python多重继承

    python多重继承 We are going to learn about python multiple inheritance today. Before starting multiple i ...

  9. qt 多重继承_Qt多重继承和信号

    由于QObject,我在QT中遇到了关于多重继承的问题.我知道很多其他人也有同样的问题,但我不知道该如何解决.Qt多重继承和信号 class NavigatableItem : public QObj ...

最新文章

  1. 2020 年 11 月程序员工资统计,Java 市场占有率仍第一
  2. 图的两种存储方式---邻接矩阵和邻接表
  3. Java集合:HashMap线程不安全?有哪些表现?
  4. 研发手Q推广遇到的一系列问题
  5. 基于IndRNN的手机传感器动作识别
  6. 关于CPU指标的解释
  7. 爆发前的最后按钮 白鹭推HTML5首款生态产品Egret Runtime
  8. 【蓝桥杯Java_C组·从零开始卷】第七节、递归
  9. selenium打开Firefox、IE、Chrome浏览器【python】
  10. 毕业设计管理系统PHP,asp.net/net/c#毕业论文管理系统-成品
  11. Spring Boot 之事件(Event)
  12. 探究光栅图像学之水纹渲染与折射滤镜
  13. 手把手玩转win8开发系列课程(22)
  14. Hadoop3.1.3安装教程_单机/伪分布式配置_Hadoop3.1.3/Ubuntu18.04(16.04)
  15. IDEA操作 名字快速驼峰等操作
  16. 软考中级网络工程师-第一章计算机网络概论(自我学习)
  17. Android仓库管理系统
  18. 博弈中的神奇策略:A tit-for-tat strategy
  19. 末日的传说 洛谷p1338
  20. 如何制作自己的网站?

热门文章

  1. Could not download lint-gradle.jar (com.android.tools.lint:lint-gradle:26.4.
  2. A. 位运算符的应用---管理一组事务的开关状态
  3. 2022-2028全球及中国呼吸麻醉消耗品行业研究及十四五规划分析报告
  4. Ubuntu16.04 永久修改主机名 hostname
  5. python-day05正则表达式
  6. Ubantu下hadoop运行第一个例子wordcount过程
  7. C# 的快捷键汇总(一)
  8. Pytorch 类型错误:Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor.
  9. 狗年拜年php源码,2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐!...
  10. java宠物医院_java宠物医院管理系统