正确理解面向对象程序设计 中级篇(三)设计原则之LSP:Liskov替换原则

LSP:Liskov替换原则=里氏替换原则。

子类型(subtype)必须能够替换掉他们的基类型(basetype)

如果能够理解OCP:开放封闭原则
那么就能理解LSP:Liskov替换原则 是一种约定。 它的前提是你的程序是基于OCP设计的。即通过抽象类和接口这种上层抽象将变化封存。所以在编码当中我们会优先使用这些抽象类及接口作为方法参数传递。

LSP:Liskov替换原则 是什么?

Barbara Liskov 这个人发现了一个替换性质,只有子类能够替换父类时不影响程序功能,才能称这个类是父类的子类型,否则程序就可能会出错。因为我们可以随意扩展子类,所以会导致出现搅乱父类原有功能的情况。我们无法放心的使用父类或接口,那么自然也就无法实现OCP了。

有一个经典例子是:正方形继承矩形。我们都学过正方形是特殊的矩形。矩形有长和宽。正方形长和宽一样。矩形设置长 setLength(int),设置宽setWith(int)。正方形继承了这两个方法,但是正方形四条边都一样,我们需要覆盖原有的方法让设置宽时能设置长,设置长时能设置宽。但是这种做法会给其它的开发者带来麻烦,例如计算面积时,设置了正方形宽为8,长为10 结果竟然是100而不是预期的80。你可能会说增加一个设置边的方法。但是这违反OCP。

所以说要使用成面向对象编程的这种灵活特性来就必须要做此约定。

假设扩展子类时子类的行为和父类的行为不一致了。那么不要怀疑,一定不要以扭曲父类行为的方式来达成目的。

解决这个问题可以增加一层抽象图形,图形中可以定义抽象方法计算面积。设计矩形和正方形来继承图形类。各自实现自己的设置边的方法计算面积的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值