里氏替换原则-正方形是长方形?

刚刚看到了网上关于里氏替换原则的一个经典示例:“正方形是长方形的子类,这个说法对吗”?首先,说答案,这种说法不满足里氏替换原则。,为什么这个问题的答案是“这种说法不满足里氏替换原则”而不是“”呢?因为在数学的观念里,正方形属于特殊的长方形,也就是说长和宽都相等的长方形,这种说法在数学里是没有问题的,所以引申到里氏替换原则中,是否也是成立的呢?
首先看一下百度词条对里氏替换原则的定义
“在面向对象的程序设计中,里氏替换原则(Liskov Substitution principle)是对子类型的特别定义。它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为“数据的抽象与层次”的演说中首先提出。里氏替换原则的内容可以描述为: “派生类(子类)对象可以在程式中代替其基类(超类)对象。” 以上内容并非利斯科夫的原文,而是译自罗伯特·马丁(Robert Martin)对原文的解读”。
也就是说子类要保证能够完全代替父类出现在父类可以出现的任何地方,所以子类的实现一定是要在继承父类所有方法的前提下进行自我拓展,子类的拓展条件是要比父类的拓展条件更为宽松的,然而长方形明明只有长和宽相等时才是正方形,所以正方形作为子类并没有更宽松的拓展条件,并不能出现在长方形可以出现的所有地方。因此这个说法并不满足里氏替换原则。
我看网上有些说法也都阐述了这一观点可缘由,举了很多例子,什么“白马非马”呀啥的,其实越说越绕,越解释越混乱,就是记住一句话,“**子类要保证能够完全代替父类出现在父类可以出现的任何地方”**才是满足里氏替换原则,否则则不满足。

个人理解,如有偏差或者错误的地方还请大佬指导!!!

里氏替换原则-正方形是长方形相关推荐

  1. 北风设计模式课程---里氏替换原则(Liskov Substitution Principle)

    北风设计模式课程---里氏替换原则(Liskov Substitution Principle) 一.总结 一句话总结: 当衍生类能够完全替代它们的基类时:(Liskov Substitution P ...

  2. 设计模式 里氏替换原则

    设计模式 里氏替换原则 继续里氏替换原则. 上回栗子为正方形不能被长方形继承,这次,具体 子类必须实现父类的方法 类图 对具体代码进行实践 // 定义抽象类枪 public abstract clas ...

  3. 设计模式-里氏替换原则

    设计模式-里氏替换原则 优点 面向对象的语言继承必不可少的,有如下优点 代码共享,减少创建类的工作量 提高代码的重用性 提高代码的可扩展性 提高代码的可扩展性 提高产品代码的开放性 继承侵入性 只要继 ...

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

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

  5. 软件架构-里氏替换原则

    里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计的基本原则之一. 里氏替换原则认为: 任何基类(父类或接口)可以出现的地方,子类(实现类)一定可以出现. ...

  6. java里氏替换原则例子_java 设计原则(六)里氏替换原则

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

  7. 里氏替换原则_春辉带你了解面相对象设计第二原则(里氏替换原则)

    里氏替换原则的定义 里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的"面向对象 ...

  8. 软件架构设计原则-里氏替换原则

    前言 里氏替换原则简单的理解可以是父类用到的地方可以用子类替换并且不改变逻辑,这就要求子类可以扩展父类的功能,但不能改变父类原有的功能.里氏替换原则要求 (1) 子类可以实现父类的抽象方法,但不能覆盖 ...

  9. 设计模式之七大原则——里氏替换原则(LSP)(三)

    里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题. 4 里氏代换原则(Liskov Substitution Principle, LSP) 4.1 什么 ...

  10. 七大设计原则之里氏替换原则应用

    目录 1 里氏替换原则 2 里氏替换原则应用 1 里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)是指如果对每一个类型为 T1 的对象 o1,都有类型为 ...

最新文章

  1. ISA Server 2006 安全保障指南
  2. 最新mysql5.7.12 win64 安装及配置
  3. mongodb更新某个字段_直播 | MongoDB开源数据库的云上之路
  4. 函数指针 指针函数
  5. 【2020】六家云厂商价格比较:AWS、阿里云、Azure、Google Cloud、华为云、腾讯云
  6. SQL 实战教程(八)
  7. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_09-webpack研究-webpack介绍
  8. java blocked_Java 线程状态之 BLOCKED
  9. excel高级筛选怎么用_Excel工作表中如何使用高级筛功能来实现多条件筛选
  10. 用SDK包开发K66FX18学习笔记(4)
  11. go每日新闻(2021-12-01)——Go 1.18新特性前瞻:原生支持Fuzzing测试
  12. django 下mailgun的使用
  13. Ubuntu18.4设置永久DNS
  14. 如何批量增加视频的音量(ffmpeg)
  15. 操作系统:页面置换算法(FIFO算法、LRU算法、LFU算法、NRU算法)实验报告
  16. 我的世界mod整合包java_我的世界豆腐mod整合包
  17. Python重要知识点梳理一
  18. VS编译缺少unistd.h头文件
  19. org.aspectj.weaver.ResolvedType$Array cannot be cast to org.aspectj.weaver.ReferenceType
  20. VMware虚拟机挂载/卸载U盘的两种方法

热门文章

  1. 摄像头视频直播方案比较之方案一:萤石云
  2. win7 桌面html,极品壁纸再一张:Windows7桌面就是我的家
  3. Vue面试中,经常会被问到的面试题/Vue知识点整理
  4. 【Go语言】动态库和静态库详解
  5. mpa和pis_压力单位pis、bar与Mpa换算
  6. 软考-中级-网络工程师-知识点个人总结(二)
  7. 硬件科普系列之内存篇
  8. windows——win10如何远程控制另一台电脑
  9. PCAN-Explorer5 基本使用方法
  10. 【FinE】EMD/EEMD方法及金融数据分解