一、什么是继承?什么是组合
1.所谓组合是指新类由现有类的对象合并而成,称这种构造类的方式为组合;
2.所谓继承是指通过扩展已有类来获得新功能的代码重用方法。
二、二者各自的优缺点
1.组合
1)优点
- 被包含对象通过包含他们的类来访问
- 黑盒重用,因为被包含对象的内部细节是不可见的
- 很好的封装
- 每个类专注于一个任务
- 通过获得和被包含对象的类型相同的对象引用,可以在运行时动态定义组合的方式
2)缺点
- 结果系统可能会包含更多的对象
- 为了使组合时可以使用不同的对象,必须小心的定义接口
1)优点
- 新的实现很容易,因为大部分是继承而来的
- 很容易修改和扩展已有的实现
- 打破了封装,因为基类向子类暴露了实现细节
- 白盒重用,因为基类的内部细节通常对子类是可见的
- 当父类的实现改变时可能要相应的对子类做出改变
- 不能在运行时改变由父类继承来的实现
1.考虑是否需要从新类上溯造型回基础类。若必须上溯,就需要继承;否则用组合。
2. “属于”关系(is-a)用继承来表达,而“包含”(has-a)关系用组合来表达。