「京东」程序员必会的设计模式七大原则之——里氏替换原则


「京东」程序员必会的设计模式七大原则之——里氏替换原则
文章图片
「京东」程序员必会的设计模式七大原则之——里氏替换原则
文章图片
「京东」程序员必会的设计模式七大原则之——里氏替换原则
文章图片
「京东」程序员必会的设计模式七大原则之——里氏替换原则
文章图片
「京东」程序员必会的设计模式七大原则之——里氏替换原则
文章图片
【「京东」程序员必会的设计模式七大原则之——里氏替换原则】
「京东」程序员必会的设计模式七大原则之——里氏替换原则
临近端午节 , 各位读者 , 你们假期行程安排好了吗?“菜鸟”已经做好决定了 , 谁都不能阻拦(产品经理也不行) , “菜鸟”要好好在家休息三天 。 最近实在是太累了 , 一直在疯狂的加班 。
好了好了言归正传 , 开始我们的正文 。 今天由“菜鸟”为大家分享一下设计模式七大原则中的“里氏替换原则” 。 讲该原则之前我们不得不提一下面向对象对象的三大特性 , 它们分别是:封装、继承、多态 。 相信了解面向对象编程的程序员 , 对这三大特性肯定不会陌生 。
那么肯定就有人会产生疑问了 , 这三大特性跟我们今天的内容有什么关系吗?别慌且听“菜鸟”慢慢诉说 , 我们今天分享的“里氏替换原则”就是专门为“继承”所准备的 。
我们应该都知道使用继承也是存在弊端的 , 它会给程序带来侵入性 , 并且降低程序的可移植性 , 还会增加对象之间的耦合性 。 当父类需要修改时 , 需要考虑到所有的子类 , 盲目修改父类 , 有可能会造成子类的功能产生异常 。
为了减少这些弊端 , 就产生了“里氏替换原则” , 该原则是1988年由麻省理工一位名为Barbara Liskov的女士提出 。 通过其名称 , 我们应该能看出来该原则的重点就在“替换”这两个字上 。
该原则的核心思想就是在程序当中 , 如果将一个父类对象替换成它的子类对象后 , 该程序不会发生异常 。 这也是该原则希望达到的一种理想状态 。
下面就让我们从四个方面来深入了解一下里氏替换原则 。
第一点讲第一点之前我们先思考在“继承”中会面临的这样一个问题:我们的父类定义好的方法 , 并不会强制要求其子类必须完全遵守该方法的实现规则 , 它是可以修改继承自父类的任意方法的 。
如以下代码所示:
父类的本意是想要定义一个两数相加的方法 , 但是子类继承该方法后却修改为减法 , 并且也成功了 。 这样操作后 , 会对整个继承体系造成破坏 。 当你想把使用父类的地方替换为其子类时 , 会发现原来的正常的功能现在出现问题了 。
为了解决此问题 , 就有了里氏替换原则的第一点:

子类可以实现父类中的抽象方法 , 但是不能重写(覆盖)父类的非抽象方法 。
如果我们严格遵守该原则就不会产生上面的问题 。
第二点当我们迫不得已需要在子类中添加一个跟父类方法名称相同的方法时 , 就需要遵守下面这点 。
当子类需要重载父类中的方法的时候 , 子类方法的形参(入参)要比父类方法输入的参数更宽松(范围更广) 。。
这句话的意思大家能明白吗?不是特别清楚也不用着急 , 请看下面的代码 。