里氏转换LSP

里氏转换

首先DEF:Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of the program (correctness, task performed, etc.).----(WiKipedia)
简单的理解:里氏可以将基类对象替换成其子类,程序正常反之则不行。
在HeadFirst系列的书中生动的提出过一个动物园的例子: 动物园有猫科犬科鸟类,
鸟类中有一个方法体叫做fly, 可以理解做鸟类下所属的所有子类都会fly这个技能(方法),从程序的理解上是正确的即LSP原则,但是实际上呢? 有些鸟类是不会飞的,但其确实会有这个方法,所以这个时候就需要对这些不会飞的鸟类重写fly方法从而声明其不会飞。
里氏转换的使用大致可以分为两类:

  1. 子类对象赋给父类对象,从而在某些地方可以输入子类即可替代父类实现函数方法。
  2. 同子类类型对象可以将上述的父类对象强制转换回子类对象。

LSP定义了子类必须包含其基类拥有的所有方法,这个其实大家即使不去关注这些原则也能在平时例子中使用到。

最常见的也是VS这款宇宙第一IDE中自己经常会出现一些方法提示如:
string s=string.join(" ", object[]).
此处object就是IDE本身封装的一个基类,我们通过F12往往能看到相对底层一点的东西。
使用这个字符串的join方法时,我们大多不会直接输入一个object数组,大多会是字符串数组。这个时候系统其实就实现了里氏转换。

具体语言定义还是比较抽象的,但是在平时的使用中,是会经常遇见的,如果有出错望斧正!抱拳谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值