结合使用组合和继承

虽然编译器强制你去初始化基类,并且要求要在构造器起始处就要这么做,但是它并不监督你必须将成员对象也初始化。

是这样理解的:

new一个子类对象时,要调用子类的构造方法,再调用方法的首行调用父类的构造方法,如果调用无参数的,默认调用。

如果子类对象中有成员属性对象时,此属性编译器不检查此成员属性是否初始化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 16:55:33

结合使用组合和继承的相关文章

C++中组合和继承的初始化

在C++中单个类的初始化比较简单就略过不说. 当一个类继承了另外一个类,或者是一个类中还存在一个类 class A{ ... }: class B { ... }: class C:classA{ private: B bb; int x public: C(int ii):B(ii),bb(ii) ,x(ii){}; }: 此时我们进行初始化的设置采用的 C(int ii):B(ii),bb(ii), x(ii)这里必须说清楚的有几点: 1.参数是通过C(int ii)向冒号之后的类或者是变量

GeekBand-secondweek-c++的组合和继承

组合与继承 c++最重要的特性之一就是对代码的重用,除了拷贝,c++应该具有更深入的功能 1.组合和继承 组合是简单地创建一个包含已存在的类对象的新类,新类是由已存在的类对象组合而成的:继承是以一个已存在类为基础创建一个新类,增加或重写成员函数,增加成员变量,但不缩减它的内容,称为继承: 组合与一般的类区别不大,只是成员变量有部分对象,而不是一味的内置类型. 2.简单继承 最简单的继承,无任何虚函数,基类与派生类无任何相同名字的成员变量和成员函数,public派生时,对函数的使用就按照名字来,但

编写高质量代码改善C#程序的157个建议——建议103:区分组合和继承的应用场合

建议103:区分组合和继承的应用场合 继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用.继承应该被当做设计架构的有用补充,而不是全部. 组合不能用于多态,但组合使用的频率却要远远高于继承. 继承UML图如下: 对应的代码如下: abstract class Stream { //省略 } class FileStream:Stream { //省略 } class MemoryStream : Stream { //省略 } 组合UML图如下: 对应代码如下: c

深入理解React组件传值(组合和继承)

在文章之前,先把这句话读三遍 Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式.注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数. 来源于React中文文档,组合和继承的一句话 其实这句话之前看过很多遍,主要还是应用于数据获取上. 在完全理解这句话之前,在写子组件改变兄弟子组件的状态上,没有头绪,同事上午跟我讲解了,我自己再把代码重新写一遍就认识到了,我完全忽略了组件传函数的方法,解锁这个方法以后,再写代码如同打开了一扇大门. 下面来看例子: 以

Java基础 -- 复用类(组合和继承)

复用类有两种实现方式. 在新的类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以这种方法称之为组合. 采用继承实现. 一  组合语法 下面创建两个类WaterSource和SprinklerSystem.其中SprinklerSystem中包含WaterSource的对象引用. class WaterSource { //如果定义时没有初始化,则基本类型会被自动初始化为0,对象引用初始化为Null private String s; WaterSource(){ System.out.

Java 继承、多态与类的复用

摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了它的实现机制和详细应用.此外,为了更好地理解继承和多态.我们对final关键字进行了全面的介绍. 在此基础上.我们介绍了Java中类的载入及初始化顺序.最后.我们对面向对象设计中三个十分重要的概念–重载.覆盖与隐藏进行了详细的说明. 要点: 继承 组合,继承,代理 多态 final 关键字 类载入及

【OC学习-13】什么是组合,它和继承是什么关系?

继承有两缺点:(1)当层级越来越多时,假如每一个层级都有实例变量,那么最下层的子类继承的实例变量会超级多,沉重.(2)当消息传递自子类往上时.层级越多,效率越低下. 所以就有了组合.说实话区分继承和组合真不是那么easy.所谓两者是"is a"关系则是继承,两者是"has a"则是组合,还是模糊.事实上.这两个概念无须区分十分明显,仅仅须要记住:a)组合和继承实现的功能几乎相同,可是实现的形式不一样,记住各自的形式就可以:b)尽量用组合. 很多其它差别详见:http

java-组合优于继承

组合和继承,都能实现对类的扩展. 区别如下表所示 组合 继承 has-a关系 is-a关系 运行期决定 编译期决定 不破坏封装,整体和局部松耦合 破坏封装,子类依赖父类 支持扩展,随意增加组合类 只能继承一个父类,必须包含所有方法,增加系统复杂性 动态选择组合类方法 复用父类方法 下面通过一个例子说明,子类继承必须包含所有父类方法,增加了出错率,修改父类方法会引起所有子类功能变化. /** * 呼叫基类 * * @author peter_wang * @create-time 2014-5-2

Python学习之旅—面向对象进阶知识:类的命名空间,类的组合与继承

前言 上篇博客笔者带领大家初步梳理了Python面向对象的基础知识,本篇博客将专注于解决三个知识点:类的命名空间,类的组合以及面向对象的三大特性之一继承,一起跟随笔者老看看今天的内容吧. 1.类的命名空间 在上一篇博客中,我们提到过对象可以动态添加属性,一起来回忆下昨天的知识点,看如下的代码: class A: pass a = A() a.name = 'alex' print(a.name) 这里我们手动为a对象添加了一个属性name,然后直接打印可以得到a对象的名称.通过这个例子,我们可以