在最后一章里,我将介绍面向对象编程技术里最为人熟知的一个特性:继承。与任何强有力的特性一样,继承机制十分实用,却也经常被误用,而且常得等你用上一段时间,遇见了痛点,才能察觉误用所在。
特性(主要是函数和字段)经常需要在继承体系里上下调整。我有一组手法专门用来处理此类调整:函数上移(350)、字段上移(353)、构造函数本体上移(355)、函数下移(359)以及字段下移(361)。我可以使用提炼超类(375)、移除子类(369)以及[第 12 章 处理继承关系/12.9 Collapse Hierarchy|折叠继承体系]](380)来为继承体系添加新类或删除旧类。如果一个字段仅仅作为类型码使用,根据其值来触发不同的行为,那么我会通过以子类取代类型码(362),用一个子类来取代这样的字段。
继承本身是一个强有力的工具,但有时它也可能被用于错误的地方,有时本来适合使用继承的场景变得不再合适——若果真如此,我就会用以委托取代子类(381)或以委托取代超类(399)将继承体系转化成委托调用。
12.6 Replace Type Code with Subclasses