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


那么这样做有什么意义那 , 目的又是为了什么那?大家可以先思考一下 。
其实很简单 , 这样做最直接的一个目的就是防止我们将父类对象替换为子类对象后 , 造成方法调用混乱的问题 。
请看下面测试代码和其执行结果:
执行结果如下:
如果没有遵守上面的规则的话就会造成很大的麻烦 , 请看下列示例代码 。
测试结果如下:
确实发生问题了吧!我们的本意是希望对象替换后还执行原来的方法的 , 可结果却发生变化了 。 这样是不符合里氏替换原则的 。 所以我们要时刻牢记 , 子类方法的入参要比父类的入参范围更大 , 这样才不会造成不必要的错误 。
第三点当我们需要重写或者实现父类方法时 , 需要遵守下面这一点 。

重写或者实现父类方法的时候 , 方法的返回值可以被缩小 , 但是不能放大 。
示例代码:
如果我们试图在子类中放大 , 重写或实现来自父类方法的返回值时 , 代码会报错 , 连基本的编译器都无法通过 。
第四点
子类可以拥有自己独特的方法或属性 。
这句话就更好理解了 , 它说明子类不光可以拥有从父类继承来的东西 , 也可以进行自我扩展 , 编写属于自己的东西 。
这一点相信大家都明白 , 我就不在编写示例代码了 。
总结通过上面的描述相信大家都对里氏替换原则有了一个基本的概念 , 其实它就是告诉我们在继承中需要注意什么问题和遵守什么规则 。
然而在实际开发中我们在很多时候还是会违背该原则的 , 虽然表面上没有什么特别大的问题 , 但是这样做会大大增加代码的出错率 。 我们编写代码时不光要考虑怎么实现该功能 , 程序的健壮性和后期的扩展以及移植都是需要考虑到的 。 只有这样做才可以使我们的程序更加优秀 。
好了今天的分享就到这里了 , 如果感觉“菜鸟”的文章写的还不错的 , 记得点赞加关注呦!你们的支持就是我坚持下去的动力 。


推荐阅读