软件构造博客——LSP原则

本人水平有限,如有错误请在评论区中指出,谢谢各位。

LSP原则原名是Liskov Substitution Principle,是Liskov提出的替换类的原则

LSP的精髓是Subtype polymorphism,即子状态多态,这个词听起来有些拗口,但是其意思却很朴素:处理父类的所有方法,可以用来处理任意子类。基于这一思想,我们从几个维度来看。

首先是规约层面。由于父类能处理的,子类都能处理,所以子类有比父类更强的规约,即更弱(或相同)的前置条件或更强(或相同)的后置条件。同样的,子类也要有比父类更强的RI(子类RI不能弱于父类,举个例子,父类people人数不能为负数,子类student人数为-1,用子类做父类操作时可能出错)。

然后是方法层面。同样的,父类的方法子类都要有,子类型可以增加方法,但不可删。而且子类型需要实现父类型未实现的方法。

最后是参数方面。子类型的参数要“宽泛”,不仅父类可以接受的其可以接收,还可能接收一些父类不能接受的,即子类型参数“逆变”,相对于父类到子类的变化,子类的参数变化是反过来的。但是java不能识别逆变,其只是把之当做overload而非override。

相对的,子类型返回的值要“严格”,要是父类返回值的子类或相同。

子类也不能抛出比父类更多的异常,子类的异常只能在父类的基础上变少,类型不能变,否则客户端在处理抛出异常时,catch不到子类型的异常,会出问题的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值