知识卡片
覆写方法的返回类型只能收紧不能放大
内容
方法返回值类型是”后置条件”。[[里氏替换原则的两种定义]]要求子类覆写方法的返回类型须等于 或小于父类返回类型,不能放大——调用方按父类类型使用返回值,子类返回更宽泛类型会有超出 部分无法安全使用。发散:前置条件”放大”、后置条件”收紧”合起来是契约式设计的核心:子类 可以要求更少,但必须承诺更多或同等,这正是LSP保证版本升级兼容性的根本原因。
参考来源
- 位置:《设计模式之禅(第2版)》第2章《里氏替换原则》(源文件:_epub-src/text/part0009.html)
- 结论依据:原文说明父类方法返回值类型T、子类同名方法返回值类型S时,"里氏替换原则就要求S必须小于等于T",并分覆写、重载两种情况解释为何返回类型只能收紧,最终得出该规则保证"版本升级时也可以保持非常好的兼容性"。
- 原始内容:父类的一个方法的返回值是一个类型T,子类的相同方法(重载或覆写)的返回值为S,那么里氏替换原则就要求S必须小于等于T……采用里氏替换原则的目的就是增强程序的健壮性,版本升级时也可以保持非常好的兼容性。