前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >白话解说,半分钟就懂---里氏替换原则

白话解说,半分钟就懂---里氏替换原则

作者头像
瑞新
发布2020-07-07 14:35:57
3980
发布2020-07-07 14:35:57
举报

提出者的原话

A type hierarchy is composed of subtypes and supertypes. The intuitive idea of a subtype is one whose objects provide all the behavior of objects of another type (the supertype) plus something extra.What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.

翻译

“类型层次由子类型和超类型(也就是父类)组成,直觉告诉我们,子类型的含义就是该类型的对象提供了另外一个类型(超类型)的对象的所有行为功能,并有所扩充。这里需要如下的替换性质:若对于每一个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型。”这就是LSP的最初含义。

简而言之

子类必须能够替换成它们的基类,在一个软件系统中,子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。

举个栗子

“正方形不是长方形”是一个理解里氏代换原则的最经典的例子。在数学领域里,正方形毫无疑问是长方形,它是一个长宽相等的长方形。我们开发的一个与几何图形相关的软件系统中,让正方形继承自长方形是顺利成章的事情。

作用

子替换父,效果一样,增强健壮性。原来的可以继续使用

违反情况

子类重写父类的方法 Car car(y) = new petcar(n) car.skill(n)

遵守情况

子:参数不同(参数范围放大 比如hashmap比Map范围小) 参数:子父不同 方法:未重写,子继承父

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提出者的原话
  • 翻译
  • 简而言之
  • 举个栗子
  • 作用
  • 违反情况
  • 遵守情况
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档