面象对象设计6大原则之三:里氏替换原则

Posted wall-ee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面象对象设计6大原则之三:里氏替换原则相关的知识,希望对你有一定的参考价值。

里氏替换原则LSP),The Liskov Substitution Principle

定义

所有引用基类的地方必须能透明地引用其子类的对象,即子类可以拓展父类的功能,但不能修改父类已有的功能。

也就是说在父类出现的地方子类也可以出现,并且替换为子类也不会报错,引用者根本不需要知道引用的是父类还是子类,但是反过来就行不通了,子类出现的地方父类就不一定能出现并代替子类。在c#中,实现接口也可以叫做父子关系,继承基类也是这种关系。

里氏替换原则的特点:

1、子类可以拓展父类的功能,但不能修改父类已有的功能,如果修改了父类已有的功能,可能导致父类定义的功能在子类覆盖后不适用。

2、重载父类的方法时,子类的方法形参应该比父类更宽松。

3、实现父类的抽象方法时,子类的方法输出结果应该比父类更加严格。

4、子类可以有自己独特的私有方法,但是需要注意的是,如果子类不能完全实现父类的方法,或者父类的某一些方法在子类中已经不适用,这种情况则建议断开父子关系,使用组合等方式代替继承出现。

里氏替换原则的优缺点:

1、合理得用类的继承关系,提高了代码的复用性,但也增强了类与类之间的耦合性。

2、通过建立抽象,运行过程中具体实现取代抽象,保证了系统的可拓展性。

3、只要继承父类就拥有父类的全部属性和方法,这样减少了代码重复创建量共享了代码但也约束了子类的行为,降低了系统灵活性。

我们平时开发中可能没考虑这么多,乱覆盖父类的方法,没有多少联系的继承等很多打破了里氏替换的原则,这样不顾后果的后果就是我们写的程序存在着潜在的漏洞,而且出问题的机率也会显著提升。




参考链接:http://www.jianshu.com/p/bd020209fda9

以上是关于面象对象设计6大原则之三:里氏替换原则的主要内容,如果未能解决你的问题,请参考以下文章

面象对象设计6大原则之五:依赖倒置原则

面象对象设计6大原则之四:接口隔离原则

不一样的设计模式——— 重新理解6大原则[外篇]

「设计模式」六大原则之三:里氏替换原则小结

「设计模式」六大原则之三:里氏替换原则小结

「设计模式」六大原则之三:里氏替换原则小结