首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
编程语言
> 详细
Java 设计模式(十一) 里氏替换原则(LSP)
时间:
2016-05-12 22:57:31
阅读:
296
评论:
0
收藏:
0
[点我收藏+]
标签:
里氏替换原则(Liskov Substitution Principle)
LSP的基本概念
定义
:
所有引用基类的地方必须能
透明地使用
其子类的对象
只要父类能出现的地方子类就可出现,而且替换为子类也
不会产生任何错误或异常
,使用者可能根本就不需要知道是父类还是子类(
封装造成的多态性
)
规范
子类必须
完全实现
父类的方法
在类中调用其他类时必然要使用父类或者接口,如果子类中不支持父类中的方法,自然就违背了LSP
子类要有自己的
特性
子类是在父类的基础上实现的,有自己的特性
这也就导致了LSP的
单向性
,在子类能出现的地方,父类未必能够胜任。
比如实际开发中
向下转型
是不正确的,会抛出
ClassCastException异常
。
覆写
或
实现
父类的方法时参数可以被
放大
子类中方法的参数的前置条件必须与超类中被覆写的方法的前置条件
相同或者更宽松
因为参数类型不同会导致参数列表不同,那么实际上我们在参数类型不同时实现的是
重载
而非
覆写
所以在子类中方法条件更宽松的情况下,因为重载的调用规则,
更加匹配严谨的重载会优先调用
,也就意味着我们这个重载不会意外地覆盖父类中的方法(
比如HashMap比Map类型会优先被匹配,可能会导致重载达到也向覆写一样覆盖了父类的函数,但是显然这是不符合逻辑的
),保证了LSP的正确性。
覆写
或
实现
父类的方法时的输出结果可以被
缩小
这个缩小的具体含义如下:设父类中方法的返回值是T,子类中覆写的方法的返回值是S,那么
S要么和T是同类型,要么S是T的子类
因为在LSP下,满足缩小条件条件才能保证返回对象在使用时是
安全且完整实现
的。
优点
:采用LSP能够增强程序的
健壮性
,版本升级使能够巴证非常好的
兼容性
,即使增加子类,原有的子类还可以继续运行。
因为对于Java语言,LSP已经实现编译期和语言层级的保证,也就是当违反的时候会抛出异常,我们只需要在覆写和重载时遵循LSP即能保证这一原则的保障。
Java 设计模式(十一) 里氏替换原则(LSP)
标签:
原文地址:http://blog.csdn.net/qq_24451605/article/details/51347205
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
Spring Cloud 从入门到精通(一)Nacos 服务中心初探
2021-07-29
基础的排序算法
2021-07-29
SpringBoot|常用配置介绍
2021-07-29
关于 .NET 与 JAVA 在 JIT 编译上的一些差异
2021-07-29
C语言常用函数-toupper()将字符转换为大写英文字母函数
2021-07-29
《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)
2021-07-28
4-1 YAML配置文件 注入 JavaBean中
2021-07-28
【python】 用来将对象持久化的 pickle 模块
2021-07-28
马拉车算法
2021-07-28
用Python进行冒泡排序
2021-07-28
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!