Liskov替换原则(LSP)
- 子类必须能够替换它们的基类(IS-A)
- 继承表达类型抽象
解释:有一些地方需要使用到父类的方法,如果当前拿到的是子类的对象,子类可以转换成父类,无差别的使用。这个就是所说的替换
疑问:这不是天经地义的吗?语言自身就可以做了
但是在具体实现的时候,有一些人就会打破这一原则。
举例来说,子类继承父类之后,发现有一个父类方法是不能用的,然后就抛出exception
class A{
public:
void run();
}
class B : public A
{
public:
void run() {
throw "error";
}
}
这个做法其实就不太对了,这个就违背了子类能够替换父类的原则。这就充分说明:
- 这个子类不应该是继承这个父类
- 或者压根和这个父类没有关系,仅仅可能是一个组合关系而已,并不是继承关系。继承关系必须满足Liskov替换原则。