如果这篇文章能够帮到您,请给我一个免费的赞,谢谢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)

最新文章

  1. Hbase安装和错误
  2. 有理数的稠密性(The rational points are dense on the number axis.)
  3. 练习1-13:编写一个程序,打印输入中单词长度的直方图(水平)(C程序设计语言 第2版)
  4. 【代码笔记】iOS-使图片两边不拉伸,中间拉伸
  5. SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行)
  6. 怎么修改windows命令行字体大小
  7. spark standalone模式单节点启动多个executor
  8. mysql 按年度、季度、月度、周、日SQL统计查询
  9. kerberos+ladp+hadoop-ha 安全认证部署配置
  10. 使用IIS Express
  11. HW--漂亮度2(测试通过)
  12. [Python]Pip的安装以及简单的使用
  13. cf C Milking cows
  14. C和指针---读书笔记。
  15. 一、什么是hadoop?
  16. [原创]Faster R-CNN论文翻译
  17. hadoop新增kerberos租户
  18. JVM中垃圾收集算法总结
  19. Objective-C优缺点
  20. C# 基于 adb 控制安卓

热门文章

  1. leetcode多线程题目
  2. 小程序中webview内嵌h5页面
  3. Linux---远程连接、命令行基础、文件及目录管理
  4. nmtui 工具使用的话,需要开启NetworkManager(网卡文件不存在ens192)
  5. DirectX11 With Windows SDK--38 级联阴影映射(CSM)
  6. 12-factors
  7. mount挂载命令
  8. Redis4.0.14 迁槽失败
  9. 论文阅读 Continuous-Time Dynamic Network Embeddings
  10. 2021.12.19 eleveni的刷题记录