首页/开发/代码质量与评审速查/坏味道:被拒绝的馈赠(Refused Bequest)
重构手法62 条

坏味道:被拒绝的馈赠(Refused Bequest)

子类只用到父类很少的能力(或抛异常拒绝继承的方法):优先用组合替换继承(Replace Superclass with Delegate),或把不适用的部分下推(Push Down Method / Field)。

信号子类覆写后抛不支持、继承的大部分能力闲置
手法Replace Superclass with Delegate、Push Down Method / Field
替代组合优先于继承

组合化方向

组合化方向
// 之前:class Stack extends Vector(继承暴露了多余 API)
// 之后:class Stack { private List<Object> elements; }

易错点

  • 只为复用代码而继承:类型语义不成立,多态处出错
  • 继承改组合时公共方法全量转发:先只暴露需要的能力

数据来源与参考

  • 《重构》第 2 版 · 第 3 章(Refused Bequest)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌