面向对象设计之里氏替换原则(Liskov Substitution Principle)

【愚公系列】面向对象设计原则(三)-里氏替换原则(Liskov Substitution Principle or LSP) 面向对象设计原则是一些通用的软件设计原则,用于指导软件设计人员开发高质量、可扩展、可维护的软件系统。这些原则的作用如下:提高软件系统的可维护性:遵循面向对象设计原则可以将代码分解为更小、更专注的模块,从而降低代码的复杂性和耦合度,提高系统的可读性和可维护性。提高软件系统的可扩展性:开放封闭原则可以帮助软件系统更容易地适应变化,降低对现有代码的影响,从而提高软件系统的可扩展性和灵活性。 阅读详情

里氏替换原则:

 子类型必须能够替换它们的基类型。即任何基类可以出现的地方,子类一定可以出现。

 优点:

  1. 低耦合
  2. 可以很容易实现同一父类下各个子类的互换,而客户端可以毫无察觉。

 实例:

士兵使用不同的枪,击毙敌人。

抽象武器枪:

package com.szxy.LemonSnm;

public abstract  class WeaponGun {
    public abstract void shoot(); //射击
}

AK47:

package com.szxy.LemonSnm;

public class AK47 extends WeaponGun  {
    @Override
    public void shoot() {
        System.out.println("用AK47射击");
    }
}

手枪:

package com.szxy.LemonSnm;

public class HandGun extends  WeaponGun  {
    @Override
    public void shoot() {
        System.out.println("用手枪射击");
    }
}

 抽象枪:

package com.szxy.LemonSnm;

public abstract class Gun {
    public abstract void shoot();

}

玩具枪:

package com.szxy.LemonSnm;

public class ToyGun extends Gun{
    @Override
    public void shoot() {
        System.out.println("用玩具枪射击");
    }
}

士兵:

package com.szxy.LemonSnm;

public class Soldier {
       public void killenemy(WeaponGun gun){
           gun.shoot();
           System.out.println("击毙了敌人");
       }

    public void killenemy(Gun gun){
        gun.shoot();
        System.out.println("被敌人击毙");
    }
}

 客户端测试:

package com.szxy.LemonSnm;

public class Main {
    public static void main(String[] args) {
        System.out.println("this is LSP method");
        Soldier soldier = new Soldier();
        soldier.killenemy(new AK47());
        soldier.killenemy(new HandGun());
        soldier.killenemy(new ToyGun());

    }
}

 

java的里氏代换原则 这一个学习java的笔记,里面主要介绍java的里氏代换原则 立即下载

相关推荐

里氏替换原则Demo

http://blog.youkuaiyun.com/xingjiarong/article/details/50081857

6大设计原则之里氏替换原则(Liskov Substitution Principle)。

继承的优点: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性; 提高代码的重用性; 子类可以形似父类,但又异于父类,“龙生龙,凤生凤,老鼠生来会打洞”是说子拥有父的“种”,“世界上没有两片完全相同的叶子”是指明子与父的不同; 提高代码的可扩展性,实现父类的方法就可以“为所欲为”了,君不见很多开源框架的扩展接口都是通过继承父类来完成的; 提高产品或项目的开发性。   继承的...

孤芳不自赏 487

寒武纪AI芯片业务解析:从云端到边缘,如何布局智能计算未来?

本文深入解析了寒武纪在AI芯片领域的业务布局,重点探讨了其从云端到边缘的智能计算战略。文章分析了寒武纪云端“思元”系列芯片如何作为数据中心的高性能计算基石,以及思元220等边缘芯片如何满足碎片化场景的低功耗实时处理需求。同时,也阐述了其IP授权业务模式与技术生态构建,揭示了寒武纪在激烈市场竞争中,通过软硬件全栈方案布局智能计算未来的核心路径。

weixin_29271053的博客 405

从零开始学习Java设计模式 | 软件设计原则篇:里氏代换原则

在本讲中,我来为大家介绍一下软件设计原则里面的第2个原则,即里氏代换原则。 概述 首先,大家应该知道,里氏代换原则是面向对象设计的基本原则之一。那什么是里氏代换原则呢?里氏代换原则是指任何基类可以出现的地方,子类一定可以出现。这句话不好理解,但大家可以通俗理解成子类可以扩展父类的功能,但不能改变父类原有的功能。现在,这句话就好理解很多了,指的就是在Java里面通常都会有父子类的关系,一般而言,我们都会将子类中的功能抽取到父类中,以提高代码的复用性,而在子类中,我们只需要去定义子类特有的功能即可。 换句话说,

李阿昀的博客 2899

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3305

搞定安卓11+抓包难题:用Kitsune Mask、magic_overlayfs和LSPosed三件套绕过SSL Pinning(保姆级教程)

本文详细解析了安卓11+系统中抓包面临的核心挑战,包括SSL Pinning和Root检测机制,并提供了使用Kitsune Mask、magic_overlayfs和LSPosed三件套的完整解决方案。通过动态分区技术解析和工具链配置,帮助开发者绕过安全限制,实现高效抓包分析。

weixin_42665255的博客 444

Java设计模式之里氏替换原则(Liskov Substitution principle)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33709609的博客 535

ArcGIS License Server点击启动没反应,许可管理器无法启动怎么办

4 当我们再打开ArcGIS License Server Administrator的时候。3 在【服务】中找到【ArcGIS License Manager】双击。无法启动ArcGIS License Server的情况。在使用ArcGIS的过程中,我们经常会遇到。专注GIS领域知识分享,交流行业软件技巧。欢迎关注,不定期分享GIS各种问题和技巧。1 右击我的电脑——【管理】服务状态——启动,确定即可。启动类型选择——自动。

GIS蒲公英的博客 2万+

第1章 软件架构设计原则

本章内容定位学习设计原则,学习设计模式的基础。在实际开发过程中,并不是一定要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量,不是刻意追求完美,要在适当的场景遵循设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。本章将详细介绍开闭原则(OCP)、依赖倒置原则(DIP)、单一职责原则(SRP)、接口隔离原则(ISP)、迪米特法则(LoD)、里氏替换原则(LSP)、合成复用原则(CARP)的具体内容。

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 410

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1222

里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计的基本原则之一

类的名字不能是 Java 中的关键字,要符合标识符规 定,即名字可以由字母,下划线,数字或美圆符号组成,并且第一个字符不能是数字。里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计的基本原则之一,它指出在一个软件系统中,如果一个软件实体是使用了一个基类的类型,那么这个实体也能够使用任何基类的子类的实例,而不会出现错误。这个原则的原因在于,如果一个子类能够替换其基类,并且不会对系统的功能产生影响,那么我们可以认为这个子类和基类具有相似的行为和性质。

[Blog][Domain] programb.blog.youkuaiyun.com 668

YOLOv8【项目实战四】遥感图像目标检测:应对特殊场景的挑战,如何处理遥感图像通常具有的大尺寸、多尺度、方向多变等特点,并对 YOLOv8 进行相应调整(含源码)

遥感图像目标检测优化策略 核心挑战 图像尺寸大:遥感图像通常达数万像素,直接缩放导致小目标丢失 多尺度目标:同一图像包含几十像素的小目标和跨图像的大目标 方向多样性:目标360度任意旋转,水平框检测效果差 优化解决方案 滑动窗口分块处理: 采用1024x1024窗口大小 设置20%-30%重叠率防止边界漏检 全局坐标转换实现检测结果拼接 多尺度特征融合: 改进FPN结构增强小目标检测 自适应感受野处理不同尺寸目标 上下文信息聚合提升检测精度 旋转目标检测: 引入旋转边界框表示 角度预测分支增强方向感知 旋转

深耕 Vue 生态与 JS/TS 技术,聚焦组件封装、响应式原理、TS 类型设计,解析工程化配置与性能优化方案。同时分享 YOLOv8 目标检测实战、AI 大模型面试核心考点,以代码实例拆解技术实现与业务解法。 618

里氏替换原则(Liskov Substitution Principle,LSP):面向对象设计的基本原则

本文介绍面向对象设计的基本原则里氏替换原则(Liskov Substitution Principle,LSP)

诸神缄默不语的博客 742

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 999

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

里氏替换原则(Liskov Substitution Principle, LSP)是面向对象设计五大基本原则(SOLID)之一

✅ 合理重构:避免继承“is-a”误用,改用组合或接口抽象(如定义`Shape`接口,`Rectangle`和`Square`各自实现)。 “正方形继承长方形”是违反里氏替换原则(LSP)最经典的反例,其根本原因不在于几何关系的直观合理性(数学上正方形确实是特殊的长方形),而在于**面向对象中“继承”表达的是行为契约的可替换性,而非单纯数学子集关系**。 🔍 根本契约冲突在于: 长方形(`Rectangle`)的隐式行为契约规定——**宽(width)和高(height)是两个独立可变的状态量**

[Blog][Domain] programb.blog.youkuaiyun.com 264

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

面向对象设计原则 里氏替换原则(Liskov Substitution Principle)

里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 如此,问题产生了:“我们如何去度量继承关系的质量?” Liskov于...

weixin_33804990的博客 192

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++面向对象设计原则4:里氏替换原则(Liskov Substitution Principle, LSP)is-a关系(子类对象必须能够替换父类对象,并且替换后程序行为不会发生改变)优先组合继承

LSP 是 C++ 中实现多态性和代码健壮性的基石。通过合理设计继承关系、接口约束以及组合替代继承,可以避免因子类行为不一致导致的程序错误。子类必须能够完全替代父类,且行为一致。

Dontla的博客 1079

Bob Tarr:一些面向对象的设计法则(5):The Liskov Substitution Principle(LSP)

法则4:Liskov替换法则(LSP) 使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 [ Function That Use References To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It

bookjohn的专栏 999

【LSP简史】里氏替换原则表述方式的变化,从学术到「人话」

用不同的方式解释同一个事情,会理解的更深刻。

Abracadabra的专栏 595

里氏替换原则_软件构造心得:里氏替换原则(LSP)保持行为一致的动机与目的...

我们逐渐对于软件构造有了更深的要求。设计良好的代码需要做到可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码。抽象(Abstraction)和多态(Polymorphism)是实现这一原则的主要机制,而继承(Inheritance)则是实现抽象和多态的主要方法。而提高这一质量指标,打下构建可维护性和可重用性代码的基础,我们首先需要知道一个重要的原则。本文参考了一些...

weixin_39866774的博客 190

Liskov替换原则(Liskov Substitution Principle,LSP)是面向对象设计中的一个重要原则,它指出子类对象可以替换父类对象,而程序不会产生错误或异常

综上所述,判断一个子类是否违反了Liskov替换原则,需要考虑子类是否能够透明地替换基类、是否保持了基类的行为、是否遵循了基类的约束以及是否返回了与基类不一致的结果。Liskov替换原则(Liskov Substitution Principle,LSP)是面向对象设计中的一个重要原则,它指出子类对象可以替换父类对象,而程序不会产生错误或异常。Liskov替换原则是面向对象设计中的一个原则,它指出子类对象必须能够完全替换掉它们的父类对象,而不需要改变父类的任何属性。

[Blog][Domain] programb.blog.youkuaiyun.com 543

设计一个扩展自抽象类geometricobject_面向对象基础设计原则:3.里氏替换原则

在Java中,支持抽象和多态的关键机制之一是继承。正是使用了继承,我们才可以创建实现父类中抽象方法的子类。那么,是什么规则在支配着这种特殊的继承用法呢?最佳的继承层次的特征又是什么呢?在什么情况下会使我们创建的类层次结构掉进不符合开闭原则的陷阱中呢?这就是里氏替换原则要解决的问题。里氏替换原则(The Liskov Substitution Principle,LSP)是由Barbara Lisk...

weixin_39761880的博客 542

软件构造博客(1)-里氏替换原则(LSP)

里氏替换原则

qq_39407234的博客 374

[设计原则3] LSP 里氏替换原则

LSP原则定义: 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。 定义2:所有引用基类的地方必须能透明地使用其子类的对象。

u013150151的专栏 1182

[面向对象六大原则] 里氏替换原则(LSP)

里氏替换原则 - Liskov Substitution Principle定义一:如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都替换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。定义二:所有引用基类的地方必须能透明地使用其子类的对象。通俗来讲:只要父类能出现的地方子类就可以出现,而且替换为子类也不会出现错误和异常,使用者根本不...

dandelionela的博客 365
上一篇: 面向对象设计之开放-封闭原则(Open - Colosed Principle)
下一篇: Request processing failed; nested exception is org.springframework.transaction.CannotCreate.......
LemonSnm
博客等级 码龄8年 66粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值