liscov替换原则(The Liskov Substitution Principle)
子类型必须能够替换其基类型
派生类必须能够通过其基类型的接口使用,客户端无需了解二者之间的差异
子类型中的前置条件不能加强
指的就是函数的参数的给定范围不能变小
子类型中后置条件不能变弱
函数的返回值的给定范围不能变大
父类的不变量必须在子类中也满足
compiler编译器决定的
子类型方法参数,逆变
子类型的方法参数可以变得更抽象(父类)
子类型方法返回值,协变
子类型的方法返回值可以变得更具体(子类)
子类型中的方法不应该抛出新的异常,除非这些异常本来就是父类抛出的异常
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190625010222715.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDk3MzMw,size_16,color_FFFFFF,t_70)