继承有一些独特的优点:
- 它是自然的
- 它是优雅的
- 它允许编写一般的代码
但是,继承也有如下问题:
- 很难做得很好
- 在发现设计中的不足时很难改变
- 客户程序员很难理解
- 层次结构会“泄露”给客户代码,也难以改变
复合会得到与继承相同的结果(具体类、具体消息和重用已有代码),但有如下优点:
- 较容易开发
- 较容易改变
- 客户容易理解
- 不会泄露给客户代码
在整体上,尤其对于初学者,复合比继承更好,实现适当规模的应用程序时根本不使用继承是完全合理的。继承最好留给专家,尤其是实现可重用代码的大型库(甚至,继承最适合于很好理解的域,例如图形化用户界面、数据库、网络和集合)。