首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

课时38:类与对象:继承

目录:   一、继承   二、调用未绑定父类方法   三、使用super函数   四、多重继承   五、课时38课后习题及答案 现在需要扩展游戏,对鱼类进行细分,有金鱼(Goldfish)、三文鱼(Salmon...那么我们来思考一个问题:能不能不要每次都从头到尾去重新定义一个新鱼类?因为我们知道大多数鱼属性和方法是相似的,如果有一种机制可以让这些相似的东西得以自动传递,那就方便快捷多了。...同样是继承于Fish类,为什么金鱼(goldfish)可以移动,而鲨鱼(shark)一移动就报错? 其实这里抛出异常说得很清楚了:Shark对象没有x属性。...上面就是基本多重继承语法。但多重继承其实很容易导致代码混乱,所以当你不确定是否真的必须使用多重继承时候,请尽量避免使用它,因为有些时候会出现不可预见BUG。...【扩展阅读】多重继承陷阱:砖石继承(菱形继承)问题(https://fishc.com.cn/forum.php?

35050

24.C++- 抽象类(存虚函数)、接口、多重继承

抽象类和接口 什么是抽象类 用来表示现实世界中抽象概念 是一种只能定义类型,而不能产生对象类 只能被子类继承,且抽象类相关成员函数没有完整体现,用来被子类重写....,那就根本没有该类对象,我们该如何避免他人使用Shape类创建对象?...pa= 0x28fefc pb= 0x28ff00 为什么,pa指针和pb指针都指向d对象,它们地址却有所不同?...从上图看到,其实pa和pb还是位于d对象地址里,只是指向位置不同而已.所以在多重继承里,最好不要使用等号直接判断两个指针对象是否相等....类,学生student类,则该类成员便会拥有两个people类成员,从而产生冗余 在工程中,如何正确使用多重继承继承一个父类和多个接口 由于接口只有存虚函数,从而避免了冗余成员 在父类中提供equal

73460
您找到你想要的搜索结果了吗?
是的
没有找到

开源项目ELMo:机器学习在自动翻译中应用

“当你和我说话时候,我说这个词,你从上下文就能知道我说是伊丽莎白女王,还是象棋棋子,或是蜂房女主人,或是RuPaul鲁保罗变装比赛。” 单词具有多重含义能力称为多义性。...它们代表单词方式要简单得多:它考察了单词所有不同定义,并得出一种平均值——当然是一种复杂表示,但不能反映其真正复杂性。...它核心是使用训练数据(大量文本)来确定一个词是否有多重含义,以及这些不同含义如何在语言中被表达。...通过人工注释文本语料库来了解这些差异,可以通过人工注释来完成——但是谁想通过数百万个单词来记录下哪个女王是哪个论文第一作者马修•彼得斯解释说:“我们正在寻找一种能够显著减少对人类注释需求方法。”...配备了elmo语言引擎不会像有多年解析语言经验的人那样出色,但即使是多义性工作知识对理解一门语言也大有帮助。

1K40

Java抽象类 & 接口

抽象类如果自下而上在类继承层次结构中上移,位于上层类更具有通用性,甚至可能更加抽象。从某种角度看,祖先类更加通用,人们只将它作为派生其他类基类,而不作为想使用特定实例类。...图片---为什么要花费精力进行这样高层次抽象?每个人都有一些诸如姓名这样属性。学生与雇员都有姓名属性,因此可以将 getName() 方法放置在位于继承关系较高层次通用基类中。...接口特性接口不是类,尤其不能使用 new 运算符实例化一个接口:x = new Comparable(...); // ERROR---然而, 尽管不能构造接口对象,却能声明接口变量:Comparable...我们将此特性称为多重继承(multiple inheritance)。...实际上,接口可以提供多重继承大多数好处,同时还能避免多重继承复杂性和低效性。可以将接口看成是没有实例域抽象类,但是这两个概念还是有一定区别的。

32230

python之多继承一些问题

python与Java不同,是支持多继承。这里继承多重继承,即一个子类可以同时继承多个父类。而多层继承就是一层一层继承,比如A继承B,Bj继承C等。...子类可以同时有其父类所有公有属性和方法。 既然python中存在多重继承为什么Java中不可以有多重继承? 因为多重继承存在一些问题。...() 当多重继承中父类中存在同名方法,那么此时,子类在调用时会调用哪个方法?...这就存在了二义性,在python中,为了避免这种情况,使用MRO方式进行方法查找,即按照继承顺序依次查找。...super关键字表示该类父类。 输出: ? 无论怎么样,多重继承只是一个手段,并没有其优劣之分,只有使用者合理利用,那么它才能发挥出应有的作用,

77030

python | 关于多重继承那些事

什么是多重继承 继承是面向对象编程一个重要方式 ,通过继承 ,子类就可以扩展父类功能 。...钻石继承(菱形继承)问题 多重继承容易导致钻石继承(菱形继承)问题 ,关于为什么会叫做钻石继承问题 ,看下图就知道了 : ?...super and MRO 其实上面两个问题根源都跟 MRO 有关 ,MRO(Method Resolution Order) 也叫方法解析顺序 ,主要用于在多重继承时判断调属性来自于哪个类 ,其使用了一种叫做...C3 算法 ,其基本思想时在避免同一类被调用多次前提下 ,使用广度优先和从左到右原则去寻找需要属性和方法 。...那么如何避免顶层父类中某个方法被执行多次 ,此时就需要super()来发挥作用了 ,super 本质上是一个类 ,内部记录着 MRO 信息 ,由于 C3 算法确保同一个类只会被搜寻一次 ,这样就避免了顶层父类中方法被多次执行了

91110

C++ 多级继承多重继承:代码组织与灵活性平衡

;在 D 类中,x 属性存在两个来源:B 类和 C 类。这会导致命名冲突,编译器不知道应该使用哪个 x 属性。避免菱形继承为了避免菱形继承问题,建议您使用其他设计模式,例如接口继承或组合。...但是,它也存在一些缺点,例如复杂性和菱形继承问题。在使用多级继承之前,请仔细权衡其优缺点,并考虑其他设计模式。C++ 多重继承多重继承允许一个类从多个基类继承属性和方法。...;在 D 类中,x 属性存在两个来源:B 类和 C 类。这会导致命名冲突,编译器不知道应该使用哪个 x 属性。避免菱形继承为了避免菱形继承问题,建议您使用其他设计模式,例如接口继承或组合。...访问控制规则在多重继承中,访问控制规则遵循以下原则:公有继承: 派生类继承所有公有成员和受保护成员。私有继承: 派生类不能继承任何私有成员。...在使用多重继承之前,请仔细权衡其优缺点,并考虑其他设计模式。

10810

只有会编程的人才会用goto~

我也是,看过所有初学者书上都在贯穿着这一思想,我不明白,为什么大家都不让使用goto语句,如果真的像大家说那样恐怖,那么为什么goto语句至今还没有被移除出去。...从1969年C语言诞生到现在,经过几十年发展goto语句不仅没有被标准委员会移除,相反,在许多其他语言也被继承了下来,如:Java、C#、C++,是不是很奇怪,如果goto真的给我们带来灾难,为什么主流编程语言里面一直还在使用...,但是又不能省略,它们都是必须,试想下,如果使用goto语句?...使用goto句后,可以将一些公共逻辑抽象到固定位置处理,同时简化了代码复杂度,代码也变得易读。使用GCC同学可能知道,如果大括号超过3层,编译器可能就不会再进行优化了。...,设想如果在大型项目中,多重循环嵌套下我们如果不能准确跳出循环,结束程序,那么给我们带来后果将非常严重,不得不投入很大精力排查问题。

74630

08. 面向对象编程(二)

2、多重继承 多重继承是面向对象编程中一个概念,它允许一个类同时继承自多个父类。这使得子类可以继承多个父类属性和方法。...在Python中,多重继承是支持,但需要小心使用,因为它可能引起一些设计上复杂性和潜在问题。...在多重继承中,Python 使用 C3 线性化算法来确定方法调用顺序,这被称为方法解析顺序(Method Resolution Order,简称MRO)。...Python MRO 算法通常能够解决这个问题,但在复杂继承结构中,需要小心设计以避免混淆。 代码可读性:多重继承可能导致代码可读性降低,因为需要追踪多个父类方法和属性。...result2) # 输出: I am a static method without decorator 运行结果: 但是你会发现,其实加不加@staticmethod都允许用类名来访问静态方法,那么既然如此为什么要加上这个注解

8410

php面向对象第十四篇 接口 interface

什么是多重继承? 这多重继承意思是说: 一个子类继承多个父类,就是多重继承了。 那为什么一个子类不能继承多个父类?...多重继承缺点:我成为觉得(继承)它核心是子类继承父类,子类没有父类所具备方法与属性前提下。 多重继承子类继承多个父类是吧,如果两个父类都具备相同方法,子类想要调用调用哪一个啊,兄弟。。...如果是抽象类实现了接口?然后是类继承类抽象类,怎么做? <?...接口是一种特殊抽象类,抽象类又是一种特殊类,所以接口也是 一种特殊类,为什么说接口是一种特殊抽象类?.../而我们定义一接口子类去实现接口中全部抽象方法使用关键字 是“implements”,而不是我们前面所说“extends”/ /接口不能被实例,必须被继承,接口也是一样/ /我们也可以使用抽象类

29210

流畅python读书笔记-第十章-继

调用框架或不受自己控制类层次结构中 方法时,尤其适合使用 super()。 多重继承真实应用 1 多重继承能发挥积极作用。...2 《设计模式:可复用面向对象软件基础》一书中适配器模式用就是多重继承,因此使用多重继承肯定没有错 3(那本书中其他 22 个设计模式都使用继承,因此多重继承显然不是灵丹妙药) 处理多重继承...下面是避免把类图搅乱一些建议。...把接口继承和实现继承区分开 使用多重继承时,一定要明确一开始为什么创建子类。...混入类绝对不能实例化,而且具体类不能继承混入类。 混入类应该提供某方面的特定行为,只实现少量关系非常紧密方法。 04.

36010

java编程思想第九章接口

9.1抽象类和抽象方法   为什么要有抽象类?     是希望通过通用接口操作一系列类。   那么抽象类形式是什么样?     ...9.4多重继承   接口与接口之间是可以通过多重继承来提升接口功能。 9.5通过继承来扩展接口   在使用继承扩展接口时,请避免将不同接口中名字定义为一样。这样会导致编译异常。...抽象类与普通类区别:   1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类无法实现该方法,)缺省情况下默认为public。   ...2)抽象类不能够用来创建对象。   3)如果一个类继承抽象类,则必须实现父类抽象方法;否则的话,子类也必须定义为abstract类。...(这里使用成员变量这个词,实际上应该使用类变量,因为这里用到了static这个关键字)。   c)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块与静态方法。

22420

c++头脑风暴-多态、虚继承多重继承内存布局

->sisters $4 = (int *) 0x613c28 什么意思,很明显这里变了,派生类虚表指针和成员变量在前面,基类虚表指针和成员变量在后面,那么为什么基类放在后面去了?...所以虚拟继承不只是资源开销多一些,内存布局也会发生变化,那为什么还要有虚继承这个东西,接着往下看。...四、多重继承和二义性问题 看下面这段使用多重继承代码: #include using namespace std; class A { public: A()...而所谓有歧义,其实就是我们通常所说二义性问题,而二义性问题要怎么解决?这就回答了我们上一章问题,需要使用继承。...,基类虚表指针和成员变量在后; 多重继承时最好使用继承,否则不只是会产生令人头疼二义性问题,还会多一份虚基类拷贝,使用继承以后,大家共享虚基类,既节约了空间,又避免了二义性问题。

61820

java学习笔记(基础篇)—抽象与接口区别

3)抽象类失去了创建对象能力,只能提供给子类继承。 4)继承抽象类必须实现其所有的抽象方法,或者子类也定义为抽象类。 5)抽象类和抽象方法不能被final修饰。...接口 1)作用:定义规范,解决多继承问题。...多继承不足之处:造成代码浪费,引发继承多义性(即多个父类中可能含有几个命名相同方法或属性,调用时就不知道使用是来自哪里) 2)接口是抽象类抽象,接口方法都是抽象方法,默认都是public...3)接口成员变量默认都是常量,被public final static 修饰。 4)接口没有构造器,不能被实例化。 5)接口可以继承多个接口,一个类也可以实现多个接口,达到解决多继承目的。...欢迎访问我个人网站www.chlinlearn.cn,最新文章都会首先在那里发布哦^^

35930

漫谈计算机语言

自然语言指的是人类语言,比如汉语、英语等,它具有多义性(在不同上下文中,意义是不同),冗余性(语法错了一点 并不会让人引起误解)。...而形式语言是用精确数学或机器可处理公式定义语言,例如计算机编程语言,它特点就是语法非常严格,并不具有多义性和冗余性。 计算机编程语言可以分为高级语言和低级语言。...低级语言只能在某个平台上运行,不具备可移植性,比如说我们在Intel x86编写代码,无法在PowerPC或ARM上运行,它典型代表有机器语言和汇编语言。...解释型语言通过解释器读入高级语言写指令,然后解释执行,Ruby、Python、PHP都是解释型语言。编译型语言使用编译器把高级语言变成目标代码。下面举个例子来介绍解释型语言和编译型语言区别。...; } } void test(Man m){ m.eat(); } 如何定义一门语言 通过上述内容介绍,我们知道了计算机语言分类,那么,我们该如何 定义一门语言

1.4K240

C++ 虚拟继承

1.为什么要引入虚拟继承 虚拟继承多重继承中特有的概念。虚拟基类是为解决多重继承而出现。如:类D继承自类B1、B2,而类B1、B2都继 承自类A,因此在类D中两次出现类A中变量和函数。...虚拟继承在一般应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐,也并不常用,而一旦离开了多重继承,虚拟继承就完全失去了存在必要因为这样只会降低效率和占用更多空间。...为什么需要虚继承? 由于C++支持多重继承,那么在这种情况下会出现重复基类这种情况,也就是说可能出现将一个类两次作为基类可能性。比如像下面的情况 ?...所以必须把父类所有变量都继承下来,这样既能保护父类变量也能使用父类函数。 6.C++虚拟继承实际大小 输出下面class大小: [cpp] view plaincopyprint?...很奇怪吧,为什么是这个结果

2.1K80
领券