里氏代换原则是对“开-闭”原则的补充,是对实现抽象化具体步骤的规范。
里氏代换原则的严格表达是:
如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。
换言之,如果一个软件实体使用的是一个基类的话,那么一定使用于其子类,而且它根本不能觉察出基类对象与子类对象的区别。
比如,有两个类,一个是基类Base,一个是其子类Derived。如果有一方法能接受一个Base类的对象b的话:
method(b);
那么它必然可以接受一个子类Derived的对象d,既也可以有
method(d);
里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能呢不受影响时,基类才能被真正的复用,而衍生类才能在基类的基础上增加新的行为。
Kyle Wang