Liskov替换原则(LSP)

    1. 子类必须能够替换它们的基类(IS-A)
    2. 继承表达类型抽象

    解释:有一些地方需要使用到父类的方法,如果当前拿到的是子类的对象,子类可以转换成父类,无差别的使用。这个就是所说的替换

    疑问:这不是天经地义的吗?语言自身就可以做了
    但是在具体实现的时候,有一些人就会打破这一原则。
    举例来说,子类继承父类之后,发现有一个父类方法是不能用的,然后就抛出exception

    1. class A{
    2. public:
    3. void run();
    4. }
    5. class B : public A
    6. {
    7. public:
    8. void run() {
    9. throw "error";
    10. }
    11. }

    这个做法其实就不太对了,这个就违背了子类能够替换父类的原则。这就充分说明:

    1. 这个子类不应该是继承这个父类
    2. 或者压根和这个父类没有关系,仅仅可能是一个组合关系而已,并不是继承关系。继承关系必须满足Liskov替换原则。