LSP原则是什么
2024-09-05 10:22:34
如果这篇文章能够帮到您,请给我一个免费的赞,谢谢QWQ!
LSP原则并不难,但是地方就会把它说的很啰嗦,如果你对LSP还是感到疑惑,请往下看看。
先上代码:
public class Bird
{
public void fly(){}
}
public class Duck extends Bird{}
乍一看,这段代码没啥问题。没错啊,鸭子是鸟,当然鸭子也会飞了!
可是我举个反例:鸵鸟不是鸟吗?那鸵鸟会飞吗?明显不会。
但鸵鸟也是鸟啊,我如果让我的鸵鸟做鸟的子类,那我按你这么写必须会飞了,这不矛盾了吗?
写代码处处全是矛盾,那怎么行。。。所以计算机科学家研究出了一个原则,这就是LSP原则。
LSP原则:子类对象在程式中可以代替父类对象;(简单理解:父亲能做的,儿子也能做)
不是所有鸟都会飞。鸵鸟这个子类是无法代替父类对象的,因为它不会飞,上面这个设计违反了LSP原则。
下面我这么改,就符合LSP原则了:
public class Bird{} public class FlyingBirds extends Bird{
public void fly(){}
} public class Duck extends FlyingBirds{}
public class Ostrick extends Birds{}
鸭子是会飞的鸟,当然也是鸟;
鸵鸟是不会飞的鸟,但是鸵鸟是鸟;
现在逻辑就顺畅多了!
一个好好利用LSP原则的代码,一般有如下特性:
1.父亲几乎啥也不会,除了一些基本活动;儿子比父亲懂得多,但是也会父亲那些基本活动(在子类中增加方法,子类必须实现父类所有方法)
2.父亲好好的,儿子也就好好的;父亲的病一定比儿子的重(子类型重写不能抛出额外的异常;父类型无异常,子类型重写不能有异常)
这个例子来自于stackoverflow的高赞答案。有兴趣的可以去自行搜索:哎呀 - 里氏替换原理的一个例子是什么?- 堆栈溢出 (stackoverflow.com)
最新文章
- Hbase安装和错误
- 有理数的稠密性(The rational points are dense on the number axis.)
- 练习1-13:编写一个程序,打印输入中单词长度的直方图(水平)(C程序设计语言 第2版)
- 【代码笔记】iOS-使图片两边不拉伸,中间拉伸
- SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行)
- 怎么修改windows命令行字体大小
- spark standalone模式单节点启动多个executor
- mysql 按年度、季度、月度、周、日SQL统计查询
- kerberos+ladp+hadoop-ha 安全认证部署配置
- 使用IIS Express
- HW--漂亮度2(测试通过)
- [Python]Pip的安装以及简单的使用
- cf C Milking cows
- C和指针---读书笔记。
- 一、什么是hadoop?
- [原创]Faster R-CNN论文翻译
- hadoop新增kerberos租户
- JVM中垃圾收集算法总结
- Objective-C优缺点
- C# 基于 adb 控制安卓
热门文章
- leetcode多线程题目
- 小程序中webview内嵌h5页面
- Linux---远程连接、命令行基础、文件及目录管理
- nmtui 工具使用的话,需要开启NetworkManager(网卡文件不存在ens192)
- DirectX11 With Windows SDK--38 级联阴影映射(CSM)
- 12-factors
- mount挂载命令
- Redis4.0.14 迁槽失败
- 论文阅读 Continuous-Time Dynamic Network Embeddings
- 2021.12.19 eleveni的刷题记录