# 里氏替换原则 ## 规则 - 1.子类必须完全实现父类的方法 > 注意:在类中调用其它类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背LSP原则(里氏替换原则). > 注意:如果子类不能完整地实现父类的方法,或者父类 某些方法在子类中已经发生"畸变",则建议乱开父子类继承关系,采用依赖 聚合 组合等关系代替继承. - 2.子类可以有自己的个性 > 子类出现的地方,父类未必可以出现 - 3.覆盖或实现父类的方法时输入参数可以被放大 > 即方法参数范围必须大于等于父类的 > 父类出现的地方,子类就可以出现 - 4.覆写或实现父类的方法时输出结果可以被缩小 > 即返回类型范围必须小于等于父类的 -- <<设计模式之禅2>> 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。 - 1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 - 2.子类可以增加自己特有的方法。 - 3.当子类的方法重载父类的方法时,方法的前置条件要比父类方法的输入参数更宽松。 - 4.当子类的方法实现父类的抽象方法时,方法的后置条件要比父类更严格。 > 如果非要重写父类中的方法时,比较通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖、聚合和组合等关系代替。 -- 微信读书网友