设计原则-里氏替换原则
语言:Other
等级:高级
任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,即基类随便怎么改动子类都不受此影响,那么基类才能真正被复用
这就要求必须以下的规则:
- 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。
- 子类中可以增加自己特有的方法。
- 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
优点:
代码共享,即公共代码被抽到父类。
提高代码重用性。
子类在父类的基础上可以有自己的特性。
提高代码的扩展性。
缺点:
侵入性。一旦继承,父类全部属性和方法都被子类拥有
约束性。子类需要拥有父类的属性和方法,子类多了一些约束。
耦合性。父类出现修改情况时,需要考虑子类的修改。
现实中的demo:
比如你在数据库操作模型中写了一个基类的 查询。理论上这个查询只要继承了这个基类所有models都可以调用,所以子类调用的时候,如果子类重写了该方法并且更改了原来的功能。这个继承就变得不在有意义。
相关推荐