知识卡片
组合胜过继承
内容
继承在编译期固定关系,组合能在运行期替换协作者。需要复用行为时,优先把变化封装到对象组合里,通常比堆叠继承层次更灵活。发散:继承表达“是什么”,组合表达“能做什么”。
参考来源
- 位置:第1章《引言》1.6.5节「运用复用机制」(源文件:_epub-src/OEBPS/Text/part0018.xhtml)
- 结论依据:原文明确给出'优先使用对象组合,而不是类继承'这一面向对象设计原则,并说明类继承在编译时静态定义、无法在运行时改变,而对象组合在运行时动态定义、可以替换协作者,直接支持卡片对组合能在运行期替换协作者、继承在编译期固定关系的论述。
- 原始内容:"优先使用对象组合,而不是类继承……因为继承在编译时就定义了,所以无法在运行时改变从父类继承的实现……对象组合是通过获得对其他对象的引用而在运行时动态定义的。"