知识卡片

方法在子类中无意义是继承关系建错的信号

普通读书笔记卡 · 1816.f

内容

如果一个类继承了某个方法,却发现这个方法在自己身上根本没有合理的实现(比如让企鹅继承会飞的鸟类的fly方法),靠让这个方法直接报错或抛异常来敷衍过去,只是掩盖了真正的问题:继承关系本身建立错了。正确的处理方式是重新设计继承层次,把会飞和不会飞的鸟拆分成不同的子类型,让每个类只继承那些对它而言真正有意义的行为,而不是先建立起一个过宽的继承关系,再逐个方法地打补丁去否定它。

参考来源

- 位置:《架构之美》第14章《重读经典》14.3节《问题》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0279.xhtml) - 结论依据:原文明确"如果你有一个类,它包含某一个方法,而在子类中实现这个方法没有什么意义,那么这就超出了公有继承的范畴,应该是不良设计的标志……要处理类层次结构中不合适的或不相关的方法,正确的做法是重新设计这个层次结构",并以企鹅继承鸟类fly方法为反例。 - 原始内容:如果你有一个类,它包含某一个方法,而在子类中实现这个方法没有什么意义,那么这就超出了公有继承的范畴,应该是不良设计的标志……要处理类层次结构中不合适的或不相关的方法,正确的做法是重新设计这个层次结构。为了更好地反映类鸟类世界的奇特性,类层次结构将为Bird类引入一个FlyingBird子类。