一文搞懂里式替换原则

里式替换原则是面向对象设计的重要原则,它保证子类可以安全地替换父类,而不会破坏程序的逻辑性和正确性。违反这一原则可能导致输入、输出、异常行为的不一致,以及函数功能不符。多态则是一种实现方式,允许父类引用指向子类对象。遵循里式替换原则的关键在于子类需符合父类的行为约定,包括函数功能、输入输出异常规定以及注释中的约束。设计子类时,应确保其方法保持与父类的一致性,避免引入额外的限制或改变原有行为。
摘要由CSDN通过智能技术生成

原理

子类对象能够替换父类对象,并且保证原来程序的逻辑性不变以及正确性不被破坏

什么叫逻辑性不变?
举个例子,原来父类处理的时候没有任何校验不会抛出error,但是子类新增了一个校验可能会抛出error,那么子类替换父类后程序的逻辑性就会被改变,就违反了LSP原则

多态和里式替换原则的区别

多态:是一种代码实现思路
里式替换原则:是一种设计原则,用来指导子类的设计,子类替换父类的时候不能改变原来程序的逻辑、不能破坏原来程序的正确性

怎么做到里式替换原则

子类的设计要满足父类的行为约定,这些约定包括:函数声明要实现的功能,输入、输出、异常,注释里罗列的特殊说明

函数声明要实现的功能

比如父类有一个SortOrderByAmount的方法是按照订单金额给订单排序,子类重写这个方法后按照订单生成时间给订单排序,那么子类函数的功能就和父类函数的功能不一致,违反里式替换原则

输入、输出、异常

比如父类的方法可以输入任何整数,但是子类的方法加了一个校验只允许输入正整数,非正整数就会返回error,输入不一致这就违法了里式替换原则

比如父类的方法数据为空时返回空列表,但是子类方法数据为空时返回nil,输出不一致这就违法了里式替换原则

比如父类的方法只会返回空指针异常,但是子类除了空指针异常还会返回其他异常,这就违法了里式替换原则

注释中的特殊说明

比如父类的WithDraw提现方法中注释里面写了:用户的提现金额不能超过余额,但是子类重写的WithDraw方法针对VIP用户实现了透支体现,和父类注释中的特殊说明冲突,违反了里式替换原则

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值