里氏代换原则(里氏代换原则是指任何)

设计模式六大原则

里氏替换原则(Liskov Substitution Principle)

定义:子类可以扩展父类的功能,但不能改变父类原有的功能(任何基类可以出现的地方,子类一定可以出现);LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

实现两数相加的功能

实现两数相加的功能

以上代码段很容易地实现了两数之和,此时我有一个需求,两数相减后,再减去100。

两数相减后,再减去100

该段代码很简单地实现了我们的新功能,但是运行后发现,我们之前调用的两数相加的功能出现了问题。原因就是类AMath在给方法起名时无意中重写了父类BaseMath的方法,造成所有运行相加功能的代码全部调用了子类AMath重写后的方法,造成原本运行正常的功能出现了错误。在实际编程中,我们常常会通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的几率非常大。里氏替换原则就是来约束继承关系的。

遵循里氏替换原则实现我们的需求

遵循里氏替换原则实现我们的需求

该段代码,我们不重写父类的 add方法,而是新加一个属于自己的两数相减的功能,这样就不会影响之前两数相加的功能。

总结

继承作为面向对象三大特性之一,在给程序设计带来巨大便利的同时,也带来了弊端。如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能会产生故障。里氏替换原则就是规范我们子类对父类的一些操作。

里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。实际上他有以下几点要求。

子类可以实现父类的抽象方法,但不能重写父类的非抽象方法子类中可以增加自己特有的方法子类可以重载父类的方法