设计模式六大原则之里氏替换(转+自我理解)

本文深入探讨了里氏替换原则的定义与应用,强调子类应扩展而不改变父类功能,避免因功能扩展导致原有功能故障。介绍了该原则的由来、定义及遵循规则,帮助理解面向对象设计中的继承与多态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 里氏替换原则https://blog.youkuaiyun.com/zhengzhb/article/details/7281833https://blog.youkuaiyun.com/qq_34966814/article/details/79475977

    命名由来:这个原则最早于1988年,由麻省理工学院的一位女士(Barbara Liskov 芭芭拉·利斯科夫)提出,以其姓氏命名。

    定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

    • (所以这是定义了什么是子类吗?)

    • 通俗的说,就是在程序中所有使用对象A的地方,所有的对象A换成对象B时,程序的运行过程和结果没有发生变化,那么类B就是类A的子类。

    • 反过来说,如果类B是类A的子类,那么在所有使用对象A的地方,把对象A换成对象B时,程序运行结果不可以发生变化,否则就不符合里氏替换原则。


      定义2:所有引用基类的地方必须能透明地使用其子类的对象。

      问题由来:有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。

      解决方案:当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法。

      里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:

    • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。

    • 子类中可以增加自己特有的方法。

    • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

    • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值