liscov替换原则(The Liskov Substitution Principle)
子类型必须能够替换其基类型
派生类必须能够通过其基类型的接口使用,客户端无需了解二者之间的差异
子类型中的前置条件不能加强
指的就是函数的参数的给定范围不能变小
子类型中后置条件不能变弱
函数的返回值的给定范围不能变大
父类的不变量必须在子类中也满足
compiler编译器决定的
子类型方法参数,逆变
子类型的方法参数可以变得更抽象(父类)
子类型方法返回值,协变
子类型的方法返回值可以变得更具体(子类)
子类型中的方法不应该抛出新的异常,除非这些异常本来就是父类抛出的异常
