里氏替换法则有两种定义:
第一个定义,最正宗的定义:If for each object o1 of type S there is an object o2 of type Tsuch that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is
substituted for o2 then S is a subtype of T.
如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的
对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
第二个定义,functions that use pointers or references to base classes must be able to use
objects of derived classes without knowing it.
所有引用基类的地方必须能透明地使用其子类的对象。
意思就是说,父类出现的地方,之类就可以出现,而且不会影响程序的功能。但是之类能出现的地方,父类就不一定可以出现。
里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:
2.之类可以有自己的个性,意思就是说子类可以按照需要增加自己的属性和方法;
3.覆盖或实现父类方法的时候输入参数可以被放大(子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或
者更宽松);