继承与组合的区别
2016-01-30 17:31
267 查看
组合与继承都是一种常用的代码复用技巧。他们之间的的区别有如下几点。
组合中,整体类只关心子类的功能,不关心具体的实现,也无法改写父类的接口,是一种松偶尔。
继承又叫白盒复用,组合又叫黑盒复用。
如果类A是类B的一种(a kind of),则使用继承。例如人和男人的关系。
如果类A是类B的一部分(a part of),则使用组合。例如人体跟手、脚的关系。
has-A/is-A
两个类的组合属于整体与局部的关系,就例如人体与手、脚、眼睛等的关系。而两个类的继承属于从属关系,就例如父亲与儿子的关系。松耦合/紧耦合
继承中,子类能够看到父类测实现细节,能够通过重写来改变父类的行为,一定程度上破坏了封装性,是一种紧耦合。组合中,整体类只关心子类的功能,不关心具体的实现,也无法改写父类的接口,是一种松偶尔。
继承又叫白盒复用,组合又叫黑盒复用。
使用规则
如果类A跟类B毫不相干,如果A为了使用B的功能,不要使用继承,用组合。如果类A是类B的一种(a kind of),则使用继承。例如人和男人的关系。
如果类A是类B的一部分(a part of),则使用组合。例如人体跟手、脚的关系。
相关文章推荐
- 【校内互测】拯救
- Windows10快捷键应用
- maven基础
- 当你有一个锤子,你看什么都像钉子
- 处理className属性值的通用函数
- 图解密码学第三章
- JavaScript实现tab选项卡(多种方式)
- 泛型
- Bugtags 测试平台(支持ios、android)
- maven聚合工程的创建和聚合工程的打包
- JAVA系列教程
- 排序算法之归并排序
- Handler收不到消息分析
- DES加密
- 解析C#中的私有构造函数和静态构造函数
- Swift:用UICollectionView整一个瀑布流
- C++11学习笔记5——提高类型安全
- JavaSE入门学习19:Java面向对象之抽象类
- 中缀表达式求值
- HDU 1568 Fibonacci【数学】