拒绝继承的遗赠(Refused Bequest)
●症状和特点
如果一个子类只使用了继承自父类的一些方法和属性,那么这样的继承就是存在风险的。这些不被需要的方法可能会被弃置不用或者被重新定义,因此可能会导致异常的产生。
●问题产生的原因
有些程序员只是为了重用父类中的某些代码而创建了继承关系。但是子类和父类确是完全不同的两类东西。
●解决方法
如果继承关系没有任何意义,并且这个子类确实和父类没有相似的地方,那么就应该使用以委托代替继承法来消除这种继承关系。
如果这种继承关系是合理的,那么就要消除子类中不需要使用的变量和方法。提取子类从父类继承到的所有需要使用到的变量和方法,将它们放在一个新建的父类中,然后让原先的子类和父类都继承这个新的父类来达到重新整理类间的关系的目的。(提取父类法)
●好处
提升代码的清晰度和条例性。你不用再去猜测为什么这个Dog类是继承自Chair类了(虽然它们都有4条腿)。这样重构后的代码更加符合类的继承关系。同时使得代码满足里氏替换原则:子类必须能够替换掉他们的父类。即父类出现的地方就可以使用子类来代替,而且不会出现任何错误或者异常。