OCP:开放-封闭原则(Open Closure Principle):
软件实体(类,模块,函数等)应该可以扩展的,但不可修改。
LSP:Liskov 替换原则(Liskov Substitution Principle):
子类型必须能够替换它们的父类型,即
- 子类必须完全的实现父类的方法(子类型需要实现抽象类中的所有未实现的方法)
- 子类可以有自己的个性(子类型可以增加方法)
- 子类型方法参数:逆变,返回值:协变
- 子类型中重写的方法不能抛出额外的异常:协变
- 重写和实现父类的方法时输入参数可以被放大(前置条件不能强化/逆变)
- 重写和实现父类的方法时输出参数可以被缩小(后置条件不能弱化/协变)
- 更强/保持不变量