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

里氏代换原则就是使用父类的地方就可以传递子类。

以下通过案例进行理解里氏代换原则:
首先创建一个父类Person,写一个display方法

创建一个子类Man继承了Person这个类,重写其display方法

创建一个MainClass测试类,里面写一个main启动方法,写一个display方法,参数是Person这个对象,方法中调用person的display方法。

运行结果如下

对于里氏代换原则的定义来说就是我们测试类MainClass中调用display方法可以将父类换成子类如下:

这其实就是多态,就是方法参数是父类,我们用多态的形式传递其子类对象进去,也是成立的。
但是反过来如果方法的参数是子类对象,我们就不可以传递父类对象。

案例二:

创建一个Bird鸟 接口,有个方法fly飞

创建一个类 老鹰 实现了Brid接口。

创建一个麻雀类 实现了Brid接口


但是这个时候如果是企鹅的话,它实现了鸟类这个接口,但它不会飞

创建一个MainClass测试类,main方法和fly方法

测试发现企鹅就不会飞,所以企鹅不能实现鸟类的接口。

java设计模式之设计原则⑥里氏代换原则相关推荐

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

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

  2. 面向对象五大设计原则-里氏代换原则

    1.里氏代换原则 里氏代换原则(Liskov Substitution Principle)是指,任何基类出现的地方,子类一定可以出现.反之则不一定成立. 通俗的讲便是:"老鼠儿子会打洞&q ...

  3. Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)

    1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...

  4. Android大话设计模式 第四章----里氏代换原则----法海捉拿白蛇新解

    应用场景举例: <白蛇传>是中国四大民间传说之一,妇孺皆知. 在大多数人的感觉和印象中,白蛇是一个善良痴情.知恩图报.温柔友善.美貌绝伦.冰雪聪明.明辨是非.救苦救难的活菩萨:而法海却是一 ...

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

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

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

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

  7. Java里氏转换_详解Java设计模式编程中的里氏替换原则

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

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

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

  9. 里氏代换原则在Java以及设计模式中的体现

    ​里氏代换原则在Java中的体现 前面说了里氏代换原则,那么现在说一下里氏代换原则在Java中的使用. 里氏代换原则要求父类类型可以使用的,那么子类一定可以适用.因此子类必须具有基类的全部接口,并且可 ...

最新文章

  1. 二阶声波正演c语言程序_嵌入式开发中的三种程序构架
  2. SAP HUM 没有搬到Storage Type 923的HU能用HU02拆包?
  3. C++并发编程线程间共享数据std::future和sd::promise
  4. 2020-11-24
  5. C/C++开发游戏项目之《智能图形界面-贪吃蛇》
  6. otc焊接机器人操作规范_「分享」超声波塑料焊接机的操作规范
  7. Spark:Yarn-cluster和Yarn-client区别与联系
  8. 履带机器人动力总成_工业机器人在动力总成工厂智能化提升中的应用
  9. html真实雾效果图,HTML5 Canvas图片上云雾弥漫驱散特效
  10. C语言小知识---递归函数的使用
  11. 焦虑症患者,整天心神不宁,忧心忡忡怎么办?
  12. 将相同值的行内容进行合并操作--Sql2005
  13. 谷粒商城:10.商品服务 — 属性分组
  14. android: PendingIntent的使用
  15. 信息系统集成企业该具备的资质您有几个呢?
  16. cmd查看当前python安装路径_python环境配置
  17. ubuntu 移动硬盘复制小文件可以,复制大文件总是复制不成功
  18. 群晖 android软件,群晖-手机端常用App
  19. clk_get_rate函数
  20. Log与logcat

热门文章

  1. AdBoost算法详解
  2. 正则 8-18位长度,数字,字母,字符 任意两种,不含中文测试通过
  3. 01-2.C(C程序编译步骤-gcc 编译过程)
  4. HAproxy Json日志格式配置
  5. 鼠标滚动倾斜分割切换
  6. js获取select标签选中的值
  7. javascript获取当前时间
  8. 21/100. Two Sum
  9. Java 基于 UDP 实现 Socket中的多客户端通信
  10. sql server关闭存储过程中未提交的事务