专栏首页别明天就今天吧面向对象的设计原则-"里氏替换原则"

面向对象的设计原则-"里氏替换原则"

"里氏替换原则"是类的设计原则之一,我们使用"3H"学习法对其进行拆解;

why(目的):为什么要学习"里式替换原则",我们都知道面向对象的三大特性:封装、继承、多态,该原则就是对良好的"继承关系"定义了一些规范,通过学习理解后可以写出更健壮、更具扩展性的程序;

how(方法):怎么学习"里氏替换原则",方式很多:比如看书、上网找资料,先理解概念,然后实践代入场景,最后输出理解;

what(本质):"里式替换原则"到底是什么?

接下来我们开始进行具体的学习;

概念:LSP,"里式替换原则",凡是在父类出现的场景中,将父类替换为子类,程序逻辑不变,反之则未必可以。

1.子类需要实现父类的抽象方法

2.子类尽量不要重写或覆盖父类中已经实现的方法

3.子类重载父类方法时,子类输入参数>=父类输入参数&子类输出参数<=父类输出参数

4.子类可以添加自己特有的新方法,原则上不建议

LSP经典例子:正方形和长方形不符合里式替换,设置宽、高后,长方形的体积=宽*高,正方形体积=高*高,子类无法替换父类,不符合里氏替换原则;

在策略模式中,客户端类依赖抽象父类,场景类使用时传入具体的策略子类,子类都实现了父类的抽象接口,可以互换,这就符合里式替换原则;

本文分享自微信公众号 - 别明天就今天吧(gh_916f9a413d1e),作者:今天不晚

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 互联网金融-验证组件抽象设计

    在互联网金融的体系中,信贷业务的主要流程是用户注册、实名后进行授信后打出一个额度,使用额度进行消费、提现的过程。今天我们来说下授信功能的抽象设计。

    别明天就今天吧
  • 面向对象的技术流程-"设计模型"

    设计阶段是整个面向对象分析和设计的高潮阶段。在设计阶段,我们将要输出设计模型,并且需要综合各种方法技巧,做出满足各种需求的设计。

    别明天就今天吧
  • 关于Mysql的"explain"工具

    当你运行一条sql执行很慢的时候,可以使用explain sql,"explain"相当于mysql中的优化器,可以很好的分析性能瓶颈。

    别明天就今天吧
  • 里式替换(LSP)跟多态有何区别?哪些代码违背了LSP?

    整体上来讲,这个设计原则是比较简单、容易理解和掌握的。今天我主要通过几个反例,带你看看,哪些代码是违反里式替换原则的?我们该如何将它们改造成满足里式替换原则?除...

    码农架构
  • Java基础——多态Polymorphic

    方法覆写:子类覆写父类的方法,Override 多态: 针对某个类型的方法调用,其真正执行的方法取决于运行时实际类型的方法 对某个类型调用方法,执行的方法...

    羊羽shine
  • 探讨Java中的父子类转化问题

    --------------------------------------------------------------------------------...

    用户6182664
  • Java中类的加载机制---父类和子类的多态调用

    上面程序最大的难点,也是最重要的地方就是:在父类的构造函数中调用了虚函数,并且这个函数被子类重载了

    wust小吴
  • 我闻到了 Android AppCompat 代码的坏味道!

    话说,我最近写了一个小 Demo,之前开发调试一直都是在一台 6.0.1 的手机上,顺风顺水的。

    bennyhuo
  • Java类型转换之向上转换和向下转换

    向上转型:即子类对象转换为父类对象。向下转型:即父类对象转为子类对象,这是又分为安全的向下转型和不安全的向下转型

    良月柒
  • 论文笔记模板

    作者给了哪些strong conclusion, 又给了哪些weak conclusion?

    marsggbo

扫码关注云+社区

领取腾讯云代金券