1.什么是继承
A继承B,说明的是A是B的一种,并且B的所有行为对A都有意义
eg:
A=WOMAN B=HUMAN
A=鸵鸟 B=鸟 (不行),因为鸟会飞,但是鸵鸟可不成
2.继承的一些规则
1)在继承中,所有继承的东西都默认为private,就算它原来在基类是public的,如果希望在子类中也是public,那么在继承时应该使用public声明
2)如果派生类重载了基类的函数,那么派生类的对象调用这些函数时将默认为调用派生类的版本,如果要用基类的版本则要加上类名和范围分解符
3)当创建一个派生对象时将默认调用基类的构造函数,其实不管是组合还是继承,基本思想就是在进入新类的构造函数体之前调用所有的构造函数。
4)有一些函数是非自动继承的:构造函数,析构函数,operator=
3.什么是组合
若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。
例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成
4.两者的选择
is-a关系用继承表达,has-a关系用组合表达
继承体现的是一种专门化的概念而组合则是一种组装的概念
另外确定是组合还是继承,最清楚的方法之一就是询问是否需要新类向上映射,也就是说当我们想重用原类型作为新类型的内部实现的话,我们最好自己组合,如果我们不仅想重用内部实现而且还想重用接口的话,那就用继承。
接口的重用对于多态性很重要
阅读(665) | 评论(1) | 转发(0) |