设计模式六大原则---里氏替换(类继承)

一.定义

1:里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》(Data Abstraction and Hierarchy)里提出来的,她提出:继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure that any property proved about supertype objects also holds for subtype objects)。

2:里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。

二.实现方法

子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

三.违背里氏替换原则的场景

1:通过重写父类的方法来完成新的功能。这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。例如:父类是鸟,包含两个行为,吃东西和飞翔,子类是喜鹊和鸵鸟,很明显鸵鸟不会飞,必须重写鸵鸟类的飞翔方法,因此鸵鸟继承鸟违背了里氏替换原则。

四.解决违背里氏替换原则

1:取消原来的继承关系,重新设计它们之间的关系。

五.代码

1:代码如下所示,因为鸵鸟不会飞翔,因此鸵鸟类重写父类的fly方法,此处方便演示,直接抛出异常。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2:在出现父类bird(鸟)的地方,出现magpie(喜鹊)没有问题,但是出现Ostrich(鸵鸟)就不可以了,因为调用fly方法的时候会抛出异常。
在这里插入图片描述

六.作用

1:里氏替换原则是实现开闭原则的重要方式之一。
2:它克服了继承中重写父类造成的可复用性变差的缺点。
3:它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值