1、里氏代换原则

里氏代换原则(Liskov Substitution Principle)是指,任何基类出现的地方,子类一定可以出现。反之则不一定成立。

通俗的讲便是:“老鼠儿子会打洞”。

里氏代换原则是对继承关系的补充,为什么呢?

2、继承关系的特质

  • 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
  • 提高代码的重用性
  • 子类可以形似父类,但是又异于父类。
  • 提高代码的可扩展性,实现父类的方法就可以了。许多开源框架的扩展都是通过继承父类或实现接口来完成。
  • 提高产品或项目的开放性

在设计一个工具或框架时,不可能面面俱到,满足所有需求,所以需要定制一个规范的接口,让用户自己实现差异化的需求。

这里的父类不仅仅是单纯意义上的父类,更多的代表接口或抽象类。

3、继承关系的缺点

  • 继承是侵入性的,只要继承,就必须拥有父类的所有方法和属性
  • 降低了代码的灵活性,子类必须拥有父类的属性和方法,让子类有了一些约束
  • 增加了耦合性,当父类的常量,变量和方法被修改了,需要考虑子类的修改,这种修改可能带来非常糟糕的结果,要重构大量的代码。

里氏代换原则目的是为了让继承中的优势发挥到最大,劣势减到最少。

4、里氏代换原则的规范

  • 子类必须完全实现父类的方法
  • 子类可以有自己的独特性
  • 覆盖或实现父类方法时,输入参数的范围可以被放大
  • 覆盖或实现父类方法时,输出结果的范围可以被缩小

1、一般使用接口或抽象类,对外暴露的是接口,而实际应用的是子类。也是多态的应用(继承、重写、父类引用指向子类对象)其中使用到了java的隐式转换。

2、子类可以有自己的行为和外观。里氏代换原则可以正着用,但不能反着用,即子类出现的地方,父类未必可以胜任。但是避免子类有过于突出的个性,一旦子类有过于突出的个性,把子类单独作为一个业务使用,则会让代码间的耦合关系变得难以理解,缺乏替换的标准

3、方法中的输入参数称为前置条件,当子类前置条件大于等于父类约束时,替换成子类,程序的前置条件特征才不会发生畸变,里氏代换原则才成立。

4、同理,为了让运行结果不发生畸变,只有输出结果的范围小于等于父类的约束时,子类扩展才拥有健壮性,版本升级时也可以保持良好的兼容性。即使增加新子类,原有的业务还可以继续运行。

面向对象五大设计原则-里氏代换原则相关推荐

  1. 软件设计原则——里氏代换原则

    里氏代换原则 里氏代换原则是面向对象设计的基本原则之一. 里氏代换原则:任何基类可以出现的地方,子类一定可以出现. 通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能. 换句话说,子类继承父类 ...

  2. java设计模式之设计原则⑥里氏代换原则

    定义: (1)一个软件实体如果使用的是一个父类的话,那 么一定适用于其子类,而且它察觉不出父类和子 类对象的区别.也就是说,在软件里面,把父类 替换成它的子类,程序的行为没有变化. (2)一个软件实体 ...

  3. 设计模式—六大原则—里氏代换原则

    里氏代换原则(Liskow-Substitution-Principle) 定义:子类对象能够替换父类对象,而程序逻辑不变. ​ 里氏替换原则是确保继承正确使用的方法(继承使用的要求条件). ​ Li ...

  4. 设计模式七大原则-里氏代换原则

    文章目录 一.概念 二.例程 三.代码示例 一.概念 里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象 里氏 ...

  5. Java设计原则之单一职责原则、开闭原则、里氏代换原则

    文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量 ...

  6. 设计模式-设计原则之里氏代换原则

    设计原则之里氏代换原则 里氏代换原则 案例(正方形不是长方形) 案例改进 里氏代换原则 里氏代换原则是面向对象设计的基本原则之一. 里氏代换原则:任何基类可以出现的地方,子类一定可以出现. 通俗理解: ...

  7. 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)

    前言 1. 设计原则 1.1. 开-闭原则 1.2. 里氏代换原则 1.3. 依赖倒转原则 1.4. 接口隔离原则 1.5. 合成/聚合原则 1.6. 迪米特法则 前言 学习设计模式之前先要了解其中的 ...

  8. 【设计原则】里氏代换原则

    一.什么是里氏代换原则 里氏代换原则 : 子类可以扩展父类的功能,但是不能改变父类原有的功能.(子类尽量不要重写父类的方法) 原因:重写父类的方法会降低整个继承体系的复用性(当多态频繁时,程序出错概率 ...

  9. 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则

    单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...

最新文章

  1. Windows10自带搜索增强设置
  2. SQL查询语句的排序
  3. LetCode-算法-整数反转
  4. centos7 删除zabbix_Zabbix服务器端运行中显示为“不”的解决方式
  5. Navicat15连接Oracal失败解决办法
  6. 大数据分析方法管不管用
  7. linux开机启动 sogou输入法 xcompmgr .xprofile 黑块
  8. redis smembersmap_Redis五种数据类型
  9. 短路主板电源针,启动电脑的办法
  10. 二阶微分方程解法总结 Summary of Second Order Equations
  11. C语言中指针与取地址符详解
  12. 研究生学习生活日记——第二次组会
  13. OAuth2授权原理
  14. 基于低代码平台开发的督办系统为企业管理赋能
  15. 第一行代码Android技巧1——知晓当前是在哪一个活动
  16. 解决微信小程序数据渲染缓慢或卡顿的方法
  17. ATF启动(五):服务注册
  18. win10连接win7共享打印机提示无法连接到打印机
  19. 你见过最心酸的事是什么?
  20. 用一个小故事告诉你什么叫做大数据

热门文章

  1. 【梯度下降在波士顿房价预测中的应用】
  2. 锂电池实验室设计SICOLAB
  3. 符合python命名规范的标识符_Python命名规范
  4. R语言安装本地包、Warning in system(cmd) : ‘make‘ not found、安装和R版本匹配的Rtools
  5. Java程序员不可不知的几个网站,你去过几个?
  6. 大V推荐!高级java工程师面试题库
  7. 5个Dubbo面试题,含金量超高
  8. K8s初探入门详细教程(一)
  9. hive 删除某个分区中部分数据
  10. EE302 - Lab 5