C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正
本系列作为七大原则和设计模式的进阶知识,看不懂没关系

请看专栏:http://t.csdnimg.cn/mIitr,尤其是关于继承的两篇文章,本知识点与其密切相关

1.里氏替换原则(LSP)

里氏替换原则(Liskov Substitution Principle,LSP)是面向对象编程中的一个重要设计原则,它由芭芭拉·利斯科夫(Barbara Liskov)在1987年提出,这个原则的核心思想是:子类对象可以替换父类对象,而不会影响程序的正确性

说白了,就是子类可以当父类用,只要涉及到继承的类就都可以用里氏替换原则


2.举栗子

继承下的里氏替换

子类必须完全实现父类的方法,说到完全实现,是不是就联想到了抽象类?故以此为例

我有一个抽象父类Computer,有两个抽象方法,子类去要去实现

Computer noteBook = new NoteBook();
noteBook.SayName();
noteBook.OutName();public abstract class Computer{protected Computer() { }//抽象方法public abstract void SayName();public abstract void OutName();
}public class NoteBook : Computer {//1.子类必须完全实现父类的方法public override void OutName() {Console.WriteLine("5800x");}public override void SayName() {Console.WriteLine("5800x");}//2.子类可以有自己特有的方法public void SayMyName() {Console.WriteLine("笔记本");}//3.父类的行为在子类中仍然有效,下面这部分方法会抛出异常,所以违反了父对象的行为,视为无效//public override void SayName() {//    throw new NotImplementedException();//}
}

Q:这和继承不是没有区别吗?

A:其实,因为子类可以完全继承父类的这一特点,所以几乎看不出来区别

But!!!!!!!!!!!!!!!!!!!!注意这一行代码:

我用父类的类new了一个子类的对象出来,还能正常用,这就是里氏替换

3.优点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392235.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3个步骤上⼿Midjourney表情包教程,并上传到微信实现变现!

羡慕别⼈设计的表情包,有趣⼜好玩~也想拥有⾃⼰的个性表情包,可是⾯对复杂的设计流程,却不知从何开始?现在⽤Midjourney,你就可以轻松制作,各种⻛格的表情包,变钱赚钱,这些⽅法分享给 你~ 通⽤公式: 我们⽤表情包魔法公式,加⼊你想要的风格,⽐如漫画、卡通、插画、…

AI答题应用平台相关面试题

目录 1、请介绍整个系统后端的架构设计,有哪些模块以及各模块之间的关系? 2、你在项目中是如何设计库表的?可以从字段、索引、关联等方面回答。 3、为什么使用策略模式来封装不同的应用评分算法?它有哪些好处?具体如…

源码厂商数字人直播系统搭建体系解析:如何提升系统竞争力?

随着人工智能时代的来临,以数字人直播为代表的AI技术应用逐渐成为流行,越来越多的企业都开始引进或计划引进数字人直播,以实现其在直播板块的降本增效。在此背景下,各大数字人源码厂商接收到的数字人直播系统搭建订单量成倍增长&a…

计算机组成原理(1):计算机系统概述

计算机底层和计算机原理!!!! 研究计算机硬件在底层是怎末运行的! 计算机硬件能识别的数据 用低电平表示0 用高电平表示1 皮卡丘使高电压! 计算机传递数据是用的电信号!!&#xff…

Java ExecutorService:你真的了解它吗?

文章目录 一、什么是ExecutorService?二、ExecutorService的核心功能三、如何创建和使用ExecutorService? 时光匆匆,又来到另一个里程碑,感谢粉丝们的陪伴,有你们真好~ 不水文啦,一起加油叭~ 一、什么是Exe…

C语言基础知识点(十三)结构体的深拷贝与浅拷贝

在C或C等语言中,结构体(Struct)是一种用户自定义的数据类型,它允许将不同类型的数据项组合成一个单一的类型。对于结构体的拷贝,存在深拷贝(Deep Copy)和浅拷贝(Shallow Copy&#x…

2024年,pdf文献热门翻译软件总结推荐

对于如今的时代,市面上存在各式各样的学术资料,对于没有语言天赋的我,看得眼花缭乱。看个学术资料都不知道要用哪个工具,试来试去和睦浪费时间。今天就我使用过的翻译软件中,整理了四款能帮助我们解决文献翻译难题的四…

免费自动化AI视频剪辑工具

下载地址:https://pan.quark.cn/s/3c5995da512e FunClip是一款完全开源、本地部署的自动化视频剪辑工具,通过调用阿里巴巴通义实验室开源的FunASR Paraformer系列模型进行视频的语音识别,随后用户可以自由选择识别结果中的文本片段或说话人&…

RocketMQ5.0 生产者

生产者消息类型: ​​​​​​​ 延迟队列的生产者 package mainimport ("context""fmt""github.com/apache/rocketmq-clients/golang/v5""github.com/apache/rocketmq-clients/golang/v5/credentials"errgroup2 "go…

学习记录——day26 进程间的通信(IPC)无名管道 无名管道 信号通信 特殊的信号处理

目录 一、进程间通信引入 二、无名管道 1、无名管道相关概念 2、无名管道的API接口函数 pipe(int pipefd[2]); 3、管道通信的特点 4、管道的读写特点 三、无名管道 1、有名管道:有名字的管道文件,其他进程可以调用 2、可以用于亲缘进程间的通信&…

代码随想录训练营第五十二天 孤岛的总面积

第一题&#xff1a;孤岛的总面积 第二题&#xff1a;沉没孤岛 思路&#xff1a; 将所有在边界的岛屿所在的visited数组位置都置为true&#xff0c;剩下的visited[i][j] true && grid[i][j] 1的位置就是孤岛&#xff0c;将其置为1即可。 代码如下 #include <io…

【限免】通信信号与干扰信号【附MATLAB代码】

微信公众号&#xff1a;EW Frontier 关注可了解更多的雷达、通信、人工智能相关代码。问题或建议&#xff0c;请公众号留言; 个人博客&#xff1a;106.54.201.174 QQ交流群&#xff1a;949444104 摘要 本项目主要模拟仿真常见通信信号及干扰信号&#xff0c;高斯白噪声、噪声调…

NSF共享目录未授权访问

NSF共享目录未授权访问 Network File System(NFS)&#xff0c;是由SUN公司研制的UNIX表示层协议(pressentation layer protocol)&#xff0c;能使使用者访问网络上别处的文件就像在使用自己的计算机一样。服务器在启用nfs服务以后&#xff0c;由于fs服务未限制对外访问&#x…

无人机之导航系统篇

一、导航系统组成 包括惯性导航系统、卫星导航系统、视觉导航系统等。 二、导航原理 利用传感器感知无人机的位置、速度和姿态信息&#xff0c;结合地图数据和导航算法&#xff0c;计算出无人机当前的位置和航向&#xff0c;从而引导无人机按照预设的航线飞行。 三、导航精…

使用SpringBoot+Vue3开发项目(2)---- 设计文章分类的相关接口及页面

目录 一.所用技术栈&#xff1a; 二.后端开发&#xff1a; 1.文章分类列表渲染&#xff1a; 2.新增文章分类&#xff1a; 3.编辑文章分类&#xff1a; 4.删除文章分类 &#xff1a; 5.完整三层架构后端代码&#xff1a; &#xff08;1&#xff09;Controller层&#xff1a…

优化if-else的11种方案

优雅永不过时&#xff01; 1. 使用早返回&#xff08;Early Return&#xff09;&#xff1a;尽可能早地返回&#xff0c;避免嵌套的if-else。 优化前&#xff1a; public class NoEarlyReturnExample {public boolean hasPositiveNumber(int[] numbers) {boolean foundPositi…

学习大数据DAY31 Python基础语法4和基于Python中的MySQL 编程

目录 Python 库 模块 time&datetime 库 连接 MySQL 操作 结构操作 数据增删改操作 数据查询操作 上机练习 7 面向对象 OOP 封装 继承 三层架构---面向对象思想模型层 数据层 业务逻辑显示层 上机练习 8 三层架构开发豆瓣网 关于我对 AI 写代码的看法&#xf…

客户数据分析模型:RFM模型的深度解析与应用探索

RFM模型&#xff0c;作为客户数据分析中的经典工具&#xff0c;凭借其简单而强大的分析能力&#xff0c;被广泛应用于各行各业。本文旨在深入探讨RFM模型的核心原理、应用价值&#xff0c;并详细阐述其在2C&#xff08;面向消费者&#xff09;和2B&#xff08;面向企业&#xf…

使用ThreadLocal来存取单线程内的数据

一.什么是ThreadLocal&#xff1f; ThreadLocal&#xff0c;即线程本地变量。如果你创建了一个 ThreadLocal变量&#xff0c;那么访问这个变量的每个线程都会有这个变量的一个本地拷贝&#xff0c;多个线程操作这个变量的时候&#xff0c;实际是在操作自己本地内存里面的变量&…

自注意力和位置编码

一、自注意力 1、给定一个由词元组成的输入序列x1,…,xn&#xff0c; 其中任意xi∈R^d&#xff08;1≤i≤n&#xff09;。 该序列的自注意力输出为一个长度相同的序列 y1,…,yn&#xff0c;其中&#xff1a; 2、自注意力池化层将xi当作key&#xff0c;value&#xff0c;query来…