在最后一章里,我将介绍面向对象编程技术里最为人熟知的一个特性:继承。与任何强有力的特性一样,继承机制十分实用,却也经常被误用,而且常得等你用上一段时间,遇见了痛点,才能察觉误用所在。

特性(主要是函数和字段)经常需要在继承体系里上下调整。我有一组手法专门用来处理此类调整:函数上移(350)、字段上移(353)、构造函数本体上移(355)、函数下移(359)以及字段下移(361)。我可以使用提炼超类(375)、移除子类(369)以及[第 12 章 处理继承关系/12.9 Collapse Hierarchy|折叠继承体系]](380)来为继承体系添加新类或删除旧类。如果一个字段仅仅作为类型码使用,根据其值来触发不同的行为,那么我会通过以子类取代类型码(362),用一个子类来取代这样的字段。

继承本身是一个强有力的工具,但有时它也可能被用于错误的地方,有时本来适合使用继承的场景变得不再合适——若果真如此,我就会用以委托取代子类(381)或以委托取代超类(399)将继承体系转化成委托调用。

12.1 Pull Up Method

12.2 Pull Up Field

12.3 Pull Up Constructor Body

12.4 Push Down Method

12.5 Push Down Field

12.6 Replace Type Code with Subclasses

12.7 Remove Subclass

12.8 Extract Superclass

12.9 Collapse Hierarchy

12.10 Replace Subclass with Delegate

12.11 Replace Superclass with Delegate