描述
子类型必须能够替换掉他的基类型
遵守规则的设计
- 从使用者的角度靠看一个模块 ,一个模块如果孤立的看,并不具有真正的有效性 。模型的有效性只能通过他的客户程序表现。
- IS - A 的关系是针对模块行为而言的
- 在重新生成的派生类只能使用比原先前置条件范围更广的条件作为前置条件;只能使用比原先后置条件范围更加窄的条件作为后置条件
修正不符合LSP规则的设计
- 用提取公共部分的方法代替继承 : 可以吧不符合设计的类 提取公共部分 作为一个抽象基类
可能违反LSP规则的设计
- 派生类中的退化函数
class Base
{
public:
void func() {}
};
class A
:public Base
{
public:
void func() {}
};
注:存在退化函数并不一定违反设计
- 从派生类中抛出异常
在派生类中添加了基类不会抛出的异常