麻辣社区-四川第一网络社区

校外培训 高考 中考 择校 房产税 贸易战
阅读: 3199|评论: 0

[玄龙门阵] 里氏代换原则

[复制链接]

发表于 2019-4-16 19:40 | 显示全部楼层 |阅读模式
         里氏代换原则LSP指的是基类和子类的关系。只有当这种关系存在时,里氏代换关系才存在。如果两个具体的类A和类B之间的关系违反了LSP的设计,(假设是从B到A的继承关系)那么根据具体情况可以在下面的两种重构方案中选择一种。

寰俊鍥剧墖_20190416192312.png


         后来,我们需要增加一个功能:完成两个数相减后的值与100相加,由扩展的B类来负责。


寰俊鍥剧墖_20190416192718.png


        假设A类是A程序猿写的,B类是B程序猿写的。B程序猿在给方法起名的时候无意中重写了父类的方法,造成所有运行相减的功能实际运行的是相减的值在加100的功能,在数据传递的过程中,肯定能拿到数据,但是得到结果的我们却不知道实际上数据已经被改变了,使用者完全不知道。在不报错的情况下,开发者也很难发现这个问题。所以这个时候里氏代换原则让我们有了统一的标准。


       还有就是别想着代码是一个人写的哦!大家并没有时间去逐行读你的代码,他们只会按照规则进行应用。


      里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。具体有4层意思如下:

      1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。

      2.子类中可以增加自己特有的方法。

      3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

      4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。


     看上去很不可思议把,因为这样的规定有一个很明显的漏铜,即使不遵循里氏代换原则,程序照样能跑的好好的。所以大家可能会疑惑,假如我非要不遵循里氏替换原则会有什么样的后果?


     答案:代码出问题的几率将会大大增加,结果偏差大大增加。这对于一套程序来说是致命的。


打赏

微信扫一扫,转发朋友圈

已有 0 人转发至微信朋友圈

   本贴仅代表作者观点,与麻辣社区立场无关。
   麻辣社区平台所有图文、视频,未经授权禁止转载。
   本贴仅代表作者观点,与麻辣社区立场无关。  麻辣社区平台所有图文、视频,未经授权禁止转载。
高级模式 自动排版
您需要登录后才可以回帖 登录 | 注册

本版积分规则

复制链接 微信分享 快速回复 返回顶部 返回列表 关闭