- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2016/11/13 六大原则之“里氏替代原则 (LSP)“笔记 - yuanlong_zheng 的专栏 - 博客频道 - CSDN.NET
六大原则之“里氏替代原则 (LSP )“笔记
版权声明:本文为博主原创文章,未经博主允许不得转载。
1. 里氏替代原则,(Liskov Sub stitution Principle, LSP )
定义:Functions that use pointers or referrnces to base classes must be able to use objects of derived classes
without knowing it.(所有引用基类的地方必须能透明地使用其子类的对象。)
2.理解:只要父类能出现的地方,子类就可以出现,并且替换为子类也不会产生任何错误或异常,使用者可能根本就不
需要知道是父类还是子类。但反之,未要求。
继承机制的优点:
代码共享,减少创建类的工作量;
提高代码的重用性;
子类可以形似父类,又异于父类;
提高父类的扩展性,实现父类的方法即可随意而为;
提高产品或项。
继承机制的缺点:
继承是入侵性的 (只要继承,就必须拥有父类的所有属性与方法);
降低了代码的灵活性 (子类拥有了父类的属性方法,会增多约束);
增强了耦合性 (当父类的常量、变量、方法被修改时,必需要考虑子类的修改)。
定义所包含的四层意思: (另一种通俗的LSP原则讲解:子类可以扩展父类的功能,但不能改变父类原有的功能)
1. 子类可以实现父的抽象方法,但不能覆盖父类的非抽象方法 (做系统设计时,经常会定义一个接口或抽象类,然后
编码实现 (定义的方法或接口),调用类则直接传入接口或抽象类,这里也是LSP的应用体现);
2. 子类可以有自己的方法和属性 (因为LSP可以正用,不能反用:在子类出现的地方,父类未必就可以胜任 (本来就
无此要求)。即不要死扣——所有的地方 (如参数)都要以父类的形式出现 (再作转化),实现中有需要依赖子类
的情况,这是正常的);
3. 覆盖或实现父类的方法时输入参数可以被放大 (放大的实质为重载,因为参数不同;为什么只能放大?因为父类方
法的参数类型相对较小,所以当传入父类方法的参数类型 (或更窄类型)时,重载时,将优先匹配父类的方法,因
此子类重载的方法并不会对此参数类型被执行,因此保证了LSP ,且不会引起想不到的业务逻辑混乱。若为覆写,
则程序员必清楚其逻辑要义);
4. 覆写或实现父类的方法时输出结果可以被缩小 (若放大,还能用子类替换父类吗?)。
Liskov替换原则并不是要求子类不能新增父类没有的方法或者属性。因为从调用父类的客户程序的角度来说,它关心的
仅仅是父类的行为,只要子类对于父类的行为是可替换的,就不算是违背该原则。
恰恰相反,当你发现父类拥有子类不希望继承,或者勉强继承会对子类造成破坏时 ,正可以说明这个继承体系可能存
在问题,违背了Liskov替换原则。这就充分说明,子类并不关心父类的行为,但却需要遵循父类制定的规范或契约,以
满足客户调用父类的期望。正所谓萧规曹随 ,如果前人制定的规范我们不遵循,反而要去打破,那就不是继承,而是
铁了心要另起炉灶了。
一个经典的违反Liskov替换原则的例子是正方形与矩形之间的关系。这样的例子在谈对象设计的原则时,已经啰嗦得够
多,这里我就不再赘述了 。这个例子带来的教训就是,现实世界中继承的例子,不能够完全直接套用在程序世界中。
不过,作为设计的参照物,现实世界的很多规律与法则,我们仍然不可忽视。例如鲸鱼和鱼,应该属于什么关系?从生
物学的角度看,鲸鱼应该属于哺乳动物,而不是鱼类。
http://blog ./yuanlong_zheng/article/details/7425919 1/5
2016/11/13 六大原则之“里氏替代原则 (LSP)“笔记 - yuanlong_zheng 的专栏 - 博客频道 - CSDN.NET
3.问题由来
有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P ,其中P 由原有功能P1与新功能P2组成。新功
能P 由类A的子类B来完成,则子类B在完成新功能P2的同时,有会导原有功能P1发生故障。解决方案:遵循LSP :类B在
继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类的A的方法。
即为正确使用继承的好处。
5.1 如何根据
您可能关注的文档
- 20-2013IVD峰会-奥普-王钧.pdf
- 999实验不良行为记分细则(2015修订版)(1).pdf
- Agilent 1260 HPLC高效液相色谱仪操作、维护保养和清洁规程 武佳.pdf
- CSMA_CD和CSMA_CA详解_msnblog_新浪博客.pdf
- DMA方式_百度百科.pdf
- dns(域名系统)_百度百科.pdf
- Java ArrayList、Vector和LinkedList等的差别与用法(转) - SharkBin - 博客园.pdf
- java.util.Stack类简介 - 怀揣梦想,努力前行 - 博客频道 - CSDN.pdf
- java集合复习笔记-java集合继承关系图 - sdhgood的专栏 - 博客频道 - CSDN.pdf
- KMP算法详解 - joylnwang的专栏 - 博客频道 - CSDN.pdf
- 生物炭一次性施入对杉木人工林土壤铁磷耦合的影响.pdf
- 橄榄星室木虱天敌控制效能研究.pdf
- 基于数据增强与位置保护的Wi-Fi+CSI室内定位方法研究.pdf
- 基于点阵结构的功能性鞋底分区设计方法研究.pdf
- 农业文化遗产地气候适宜性评价及农户气候适应性行为研究——以安溪铁观音茶文化系统为例.pdf
- 2-乙基呋喃对番茄采后灰葡萄孢菌抑制作用研究.pdf
- 基于改进的JDE模型联合SlowFast的猪只行为分析系统研究.pdf
- 面向网络协同制造的企业生产能力建模与调度方法研究.pdf
- 七叶一枝花种质资源遗传多样性分析及核心种质构建.pdf
- 生物炭负载植物促生菌对土壤中多环芳烃污染修复研究.pdf
最近下载
- 2025用于混凝土中的防裂抗渗复合材料.docx VIP
- 地产项目商业综合体商业街马年春节美陈设计包装方案【概念包装】【春节营销】.pdf VIP
- 值班的记录表.doc VIP
- 车间主任培训(课件90页).pptx VIP
- 2025年6月大学英语六级考试真题第2套(含答案+听力原文+听力音频).docx VIP
- 汽车维修工高级(理论)复习题.docx VIP
- 高速公路质量通病防治手册(最终修改版) .pdf VIP
- 人教版 二年级数学下册二年级数学脱式练习.docx VIP
- 2024年货代明年工作计划.ppt VIP
- 2025年6月大学英语六级考试真题第1套(含答案+听力原文+听力音频).docx VIP
原创力文档


文档评论(0)