LSP原则,又叫做里氏替换原则(Liskov Substitution Principle),一个比较准确的定义如下:
Function's that ues point or references tobase classes must be able to use objects of derived classes without knowing it.
所有引用基类的地方必需能透明的使用其子类对象
在使用LSP原则时,只要在父类能出现的地方必需能透明地使用其子类对象,而且替换为子类也不会产生任何错误和异常,使用者不用知道是父类还是子类,但子类出现的地方父类未必能适应。
在类中调用其它类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。
downcast is unsafe 向下转型是不安全的
在重载时,当子类较父类的输入参数类型的范围扩大,子类代替父类传递到调用者中子类的方法都不会被执行。
子类中方法的前置条件必须比超类中被覆写的方法的前置条件相同或更为宽松。
子类继承父类后,无论是overried还是overload,其返回值需小于或等于父类返回值,而override实现父类方法时输入参数可以扩大。子类在没有override父类的方法的前提下,子类方法被执行会引起业务逻辑的混乱,因此在项目中采用LSP原则时应尽量避免子类的个性。
- Liskov Substitution Principle