面向对象设计原则:里氏替换原则(Liskov Substitution principle)

来源:互联网 发布:python 宝典 高清 pdf 编辑:程序博客网 时间:2024/06/01 09:00
热爱生活,享受娱乐,专注技术,欢迎关注微信公众号QGer,我们一起见证成长。

什么是里氏替换原则?
  •      官方解释:派生类必须是能够替代基类的 
  •      通俗解释:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
为什么遵循里氏替换原则?
  •     提高代码利用率,减少代码工作量。
  •     增强应用的健壮性,保持良好兼容性。
     LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

如何遵循里氏替换原则?
     里氏替换原则有四层含义:
  •      子类可以实现父类的抽象方法,但不能修改父类原有的方法。
  •      子类可以具有自己的功能方法。
  •      实现、重载父类的方法时,方法的输入(前置条件)可以放大
  •      实现、重载父类的方法时,方法的输入(后置条件)必须缩小
     第一层含义,字面意思,子类可以实现父类中被定义为抽象、完全抽象的方法,但是不应该修改父类原有的方法,即使原有功能增强,可以在实现原有方法的同时,增加自己需要的功能代码,不过此时就要遵循第三层、第四层含义了,此时输入参数可以比原有方法更宽松,而输出结果则起码要保证和原来一样或者更严格,否则,则建议遵循第二层含义,实现自己的功能方法,而不去修改父类原有的方法。


     


     
1 0