- 继承的优点和缺点
优点:
容易进行新的实现,因为其大多数可继承而来。
易于修改或扩展那些被复用的实现。
缺点:
破坏了封装性,因为这会将父类的实现细节暴露给子类。
“白盒”复用,因为父类的内部细节对于子类而言通常是可见的。
当父类的实现更改时,子类也不得不会随之更改。
从父类继承来的实现将不能在运行期间进行改变。
从上面的比较来看,组合总体上优于继承,但也不能完全取代继承。
- Coad规则
-
仅当下列的所有标准被满足时,方可使用继承:
子类表达了“是一个…的特殊类型”,而非“是一个由…所扮演的角色”。
子类的一个实例永远不需要转化(transmute)为其它类的一个对象。
子类是对其父类的职责(responsibility)进行扩展,而非重写或废除(nullify)。
子类没有对那些仅作为一个工具类(utility class)的功能进行扩展。
对于一个位于实际的问题域(Problem Domain)的类而言,其子类特指一种角色(role),交易(transaction)或设备(device)。