里氏代换原则

里氏代换原则nbsp 里氏代换原则的白话翻译是 一个软件如果使用的是一个父类的话 那么一定适用于其子类 而察觉不出父类对象和子类对象的区别 也即是说 在软件里面 把父类替换成它的子类 程序的行为不会有变化 简单地说 子类型必须能够替换掉它们的父类型 nbsp 里氏代换原则 LSP nbsp 子类型必须能够替换掉它们的父类型 nbsp nbsp 这就像继承中的概念 子类继承与父类 所以子类可以以父类的身份出现 nbsp 举个例

  里氏代换原则的白话翻译是: 一个软件如果使用的是一个父类的话, 那么一定适用于其子类, 而察觉不出父类对象和子类对象的区别。 也即是说,在软件里面, 把父类替换成它的子类, 程序的行为不会有变化, 简单地说, 子类型必须能够替换掉它们的父类型。

  里氏代换原则(LSP):  子类型必须能够替换掉它们的父类型。

   这就像继承中的概念, 子类继承与父类, 所以子类可以以父类的身份出现。  举个例子企鹅 和鸟的关系, 企鹅在生物学上属于鸟类, 但在面对对象设计中 企鹅并不能以父类(鸟)的身份出现 ,因为企鹅并不具备鸟飞行的行为。

                                                                   里氏代换原则


  也正因为这个原则, 使得继承复用成为了可能, 只有当子类可以替换掉父类, 软件单位的功能不受到影响时,父类才能真正被复用, 而子类也能够在父类的基础上增加新的行为。

   正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展、不然还谈什么扩展开放, 修改关闭呢。 再回过头来看依赖倒置原则, 高层模块不应该依赖低层模块, 两个都应该依赖抽象,也就更容易理解了。

                                  里氏代换原则

 依赖倒置其实就是谁也不依靠谁, 除了约定的接口, 大家都可以灵活自如。

  当一个软件系统强耦合组成太多了, 就会面临各种问题, 如果完全面对对象来设计, 那么当出现问题的时候 排查和维护也就更容易的多。  依赖倒置可以说是面对对象设计的标志, 用哪种语言来编写程序不重要, 如果编写时考虑的都是如何针对抽象编程而不是针对细节编程, 即程序中所有的依赖关系都是终止与抽象类或者接口, 那就是面向对象的设计, 反之那就是过程化的设计了。

  

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200942.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:16
下一篇 2026年3月20日 上午10:17


相关推荐

  • 推荐系统之FNN

    推荐系统之FNN今天继续写王喆老师的 深度学习推荐系统 我会根据已经梳理好的知识体系对其中的模型分别讲解 前面也已经讲过很多模型了 前一个模型是 Deep amp Cross 其中是对 W amp D 模型的 Deep 部分进行的改进 按理说今天还是将根据 W amp D 的思想衍生而来的其他模型 但是今天先讲一下 FM 在深度学习时代的三大延伸模型变体 FNN Factorizatio 模型 DeepFM Factorizatio Machinebased 模型

    2026年3月18日
    0
  • js 有序集合_java 有序map

    js 有序集合_java 有序map原文:https://blog.csdn.net/themagickeyjianan/article/details/85608721functionSortMap(){this._map={};}SortMap.prototype.add=function(key,value){this._map[key]=value;}SortMap.pr…

    2026年2月24日
    4
  • Hybrid开发框架一、Weex

    Hybrid开发框架一、Weex前言最近开始试水Weex开发,使用这么长一段时间,感觉写Weex还是非常方便的。作为一个Android开发,免不了要追查一下weex的sdk源码。今天,就以WeexSDKforAndroid为例,分析SDK的认识WeexSDK源码https://github.com/alibaba/weex/tree/dev/android整体分析下拉,按照js文件的渲染过程,绘制出了下面…

    2026年2月15日
    7
  • 深入理解C语言指针

    深入理解C语言指针一、指针的概念要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。1.1、变量和地址先写一段简单的代码:voidmain(){ intx=10,inty=20;}这段代码非常简单,就是两个变量的声明,分别赋值了10、20。我们把内存当做一个酒店,而每个房间就…

    2022年6月22日
    33
  • PowerMockito 简介「建议收藏」

    PowerMockito 简介「建议收藏」powerMockito单元测试准备1在需要执行单测的类上注解@RunWith(PowerMockRunner.class)2对于需要mock私有方法的需要注解@PrepareForTest(FooServiceImpl.class)私有方法mockcom.mock.test.service.impl.FooServiceImplTest.private_method()webcontrollermockcom.mock.test.controllerInjectMocks

    2025年8月5日
    3
  • 真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择(亲测非常实用)

    真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择(亲测非常实用)ubuntu18.04安装GPU+CUDA+cuDNN:目前,大多情况下,能搜到的基本上都ubuntu14.04.或者是ubuntu16.04的操作系统安装以及GPU环境搭建过程,博主就目前自身实验室环境进行分析,总结一下安装过程。1.实验室硬件配置(就需要而言):gpu:GeForcetitanxp12G显存内存:6…

    2022年5月4日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号