多重继承_多重继承和菱形问题
翻译自 John Demetriou 2018年4月8日 的文章 《Multiple Inheritance And The Diamond Problem》[1]
开篇之前,我假设每个人都知道在面向对象编程中继承是什么,以及它能提供什么好处。我不会深入探究对象继承的基础知识。这篇文章更关注于多重继承和它所面临的问题。
确实如此,多重继承的一个大问题就是菱形问题。你可能会问为什么?想象一下继承的分布如下:
上面的图显示,D 继承自 B 和 C,而 B 和 C 继承自 A。
现在假设 A 是一个抽象类(菱形问题的存在不必是抽象类,但它使问题更明显),并且包含一个名为 Jump()
的公共抽象方法(public abstract Jump()
)。B 和 C 都需要以自己特定的方式实现该方法。然后 D 继承自这两个类,当有人在 D 上调用 Jump()
时会发生什么?
调用 Jump()
的哪一个实现是不明确的!
就是由于这个原因,Java 和 C# 都不允许多重继承。不过它们允许多接口继承,并且 C# 的一个新特性将接口与多继承问题联系起来[2]。我们将在下一篇中讨论这一特性。
作者 : John Demetriou
译者 : 技术译民
出品 : 技术译站
链接 : 英文原文
参考
- ^Multiple Inheritance And The Diamond Problem http://www.devsanon.com/language-agnostic/multiple-inheritance-and-the-diamond-problem/
- ^C# 8: 默认接口方法 https://mp.weixin.qq.com/s/UaWxZHeYh4OQByNlyYX0cg
多重继承_多重继承和菱形问题相关推荐
- pythonsuper多重继承_小白都能理解的Python多继承
前言 本文主要做科普用,在真实编程中不建议使用多重继承,或者少用多重继承,避免使代码难以理解. 方法解析顺序(MRO) 关于多重继承,比较重要的是它的方法解析顺序(可以理解为类的搜索顺序),即MRO. ...
- 抽象类继承多个抽象类_多重继承?抽象类?C++的内存布局并不复杂
多重继承 先来看看多重继承吧 class 先来看构造函数 ...... 001917DD pop ecx 001917FC mov ecx,dword ptr [this] ;取出this指针 001 ...
- python多重继承super父类参数_多重继承如何处理super()和不同的参数?
我正在深入研究一些更高级的python主题(至少对我来说是高级的).我正在阅读有关多重继承和如何使用super()的内容.我或多或少理解超级函数的使用方式,但这样做有什么不对?以下内容:class F ...
- python super 多重继承_解决python super()调用多重继承函数的问题
当类间继承关系很简单时,super()的使用很简单. class A(object): def __init__(self): print('a') class B(A): def __init__( ...
- 计算宝宝帐户收益(多重继承)_【067】遗漏因子、缺失数据与多重检验
1. 简介 多重检验问题早已在统计学和金融界受到广泛的关注.在金融研究中,最广为人知的应用当属 Barras, Scaillet, and Wermers (2010). 三位作者将错误发现率(fal ...
- pythonsuper多重继承_Python多重继承引发的问题——牛逼的super
少说废话多做事先上一个图,此图用win7下的画图工具所画,当然,这不是重点 需要清楚的一个事情是: 任何类,都默认并隐式的继承object类(根类),在上面的图中,Transformers类同时继承了 ...
- php实现多重继承,PHP5 多重继承DEMO方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 突然想起PHP4好象不能多重继承~~无聊之下测试了PHP5的!其实实现也很简单!对于一个会JAVA的开发者!呵呵 以下为例子程序 //PHP5 接口 -- ...
- python多重继承_Python多重继承
python多重继承 We are going to learn about python multiple inheritance today. Before starting multiple i ...
- qt 多重继承_Qt多重继承和信号
由于QObject,我在QT中遇到了关于多重继承的问题.我知道很多其他人也有同样的问题,但我不知道该如何解决.Qt多重继承和信号 class NavigatableItem : public QObj ...
最新文章
- 2020 年 11 月程序员工资统计,Java 市场占有率仍第一
- 图的两种存储方式---邻接矩阵和邻接表
- Java集合:HashMap线程不安全?有哪些表现?
- 研发手Q推广遇到的一系列问题
- 基于IndRNN的手机传感器动作识别
- 关于CPU指标的解释
- 爆发前的最后按钮 白鹭推HTML5首款生态产品Egret Runtime
- 【蓝桥杯Java_C组·从零开始卷】第七节、递归
- selenium打开Firefox、IE、Chrome浏览器【python】
- 毕业设计管理系统PHP,asp.net/net/c#毕业论文管理系统-成品
- Spring Boot 之事件(Event)
- 探究光栅图像学之水纹渲染与折射滤镜
- 手把手玩转win8开发系列课程(22)
- Hadoop3.1.3安装教程_单机/伪分布式配置_Hadoop3.1.3/Ubuntu18.04(16.04)
- IDEA操作 名字快速驼峰等操作
- 软考中级网络工程师-第一章计算机网络概论(自我学习)
- Android仓库管理系统
- 博弈中的神奇策略:A tit-for-tat strategy
- 末日的传说 洛谷p1338
- 如何制作自己的网站?
热门文章
- Could not download lint-gradle.jar (com.android.tools.lint:lint-gradle:26.4.
- A. 位运算符的应用---管理一组事务的开关状态
- 2022-2028全球及中国呼吸麻醉消耗品行业研究及十四五规划分析报告
- Ubuntu16.04 永久修改主机名 hostname
- python-day05正则表达式
- Ubantu下hadoop运行第一个例子wordcount过程
- C# 的快捷键汇总(一)
- Pytorch 类型错误:Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor.
- 狗年拜年php源码,2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐!...
- java宠物医院_java宠物医院管理系统