1 符号和症状

子类仅使用从父类继承的某些方法和属性时,类层次就不太好。不必要的方法可能没有用,或者应该重新定义,排除例外。
09 代码坏味之滥用面向对象-3:拒绝遗产 - 图1

2 病因

仅仅为了重用超类中的代码,而创建类之间的继承关系,但是超类和子类完全不同。
09 代码坏味之滥用面向对象-3:拒绝遗产 - 图2

3 治疗

  • 如果继承没有意义,子类与超类没有任何共同之处,可以用委托代替继承,从而排除继承。
  • 如果继承是合适的,需要在子类中摆脱不需要的字段和方法。从父类中抽取子类需要的所有字段和方法,放到一个新的子类中,让两个类(父类和子类)继承新的子类,也就是抽取超类

09 代码坏味之滥用面向对象-3:拒绝遗产 - 图3

4 疗效

改进代码清洁度和组织性。不需要奇怪为什么DogChair继承(虽然它们都有4条腿)。