里氏替换原则(思维导图)
2018-08-19 本文已影响26人
Zentopia
image.png
- 继承的优缺点
- 优点
- 提高代码的重用性
- 提高代码的可扩展性
- 缺点
- 继承是侵入性的。只要有继承,就必须拥有父类的所有属性和方法
- 如上点,增强了耦合性。当父类被修改时,需要考虑子类的修改
- 优点
- 目的
- 采用里氏替换原则就是为了减少继承带来的缺点,增强程序的健壮性,版本升级时也可以保持良好的兼容性。即使增加子类,原有的子类也可以继续运行。
- 定义
- 只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误和异常,反之则不行。简而言之,父类可以被子类替换,子类不能被父类替换。
- 含义
- 子类必须完全实现父类的方法
- 子类可以有自己的属性和方法
- 子类替代父类传递到调用者中时,子类的方法永远不会被调用。
- 要想让子类方法被调用,必须通过覆写父类方法来实现。
- 子类中方法的前置条件必须与超类中被覆写的方法的前置条件相同或更宽松
- 前置条件:方法调用前必须满足的条件,如方法的入参类型
- 子类中方法的后置条件必须与超类中被覆写的方法的后置条件相同或更严格
- 后置条件:方法调用后必须满足的条件,如方法的返回值类型
- 使用场景
- 在类中调用其他类时,务必要使用父类或接口,否则说明类的设计已经违背了里氏替换原则。
- 如果子类不能完整地实现父类方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系来代替继承。
参考资料
- 《设计模式之禅》