里式替换原则(LSP)

里式替换原则是设计模式七大原则之一,这个原则是我们学习设计模式的基础,里式替换原则就是引导我们正确的去使用继承,由于当时在学习这个原则的时候,花费了不少时间,学习这个原则也顺带复习了java基础中的继承、重载和重写。所以才写下这篇文章,作为整理。如有写的不对的地方,麻烦各位大佬指正!

重载(overload)

重载的规则:
①方法名必须相同
②参数列表必须不同(包括参数的个数不同、参数的类型不同、参数个数相同但是不同类型参数的位置不同三种情况)
③与方法的返回值、方法的修饰符、抛出的异常无关,可同可不同
④重载是编译时多态
在这里插入图片描述
代码输出的结果是:参数是父类型

重写(override)

重写的规则:
①方法名、参数列表必须相同(两同)
②方法的返回值、抛出的异常小于等于父类的(两小)
③方法的修饰符大于等于父类的(一大)
④重写是运行时多态
在这里插入图片描述
代码输出的结果是:子类重写了父类的方法

特别注意:

下面这种情况是子类重载了父类的方法,并不是重写,因为参数列表修改了
在这里插入图片描述

继承

继承是Java中最基础也是重要的特性之一,Java中使用extends关键字来实现继承,并且Java只支持单继承。但是,接口允许多继承。

继承的优点:
①提高代码的重用性
②提高代码可扩展性

继承的缺点:
①继承具有侵入性
②继承会增强类的耦合性
③继承会使程序的可移植性降低

总的来说,继承有利有弊,为了正确的使用继承,引入了里式替换原则

里式替换原则

继承虽然可以提高代码的可重用性,子类继承父类,可以直接使用父类的方法而不用再去声明创建,但继承也带来一定的弊端,继承实际上让两个类耦合性增强了,修改父类可能使子类出现故障;我们在实际开发过程中,子类在继承父类后,根据多态的特性,可能是图一时方便,经常任意重写父类的方法,那么这种方式会大大增加代码出问题的几率。

遵循里式替换原则,应该:

1.子类可以实现父类的抽象方法,但是对于父类的非抽象方法,应该如实的去继承,尽量不要重写。
2.任何使用父类对象的方法都能透明的使用子类对象。(核心)
但是需要注意的是:里氏替换原则可以正着用,但不能反过来使用,即子类出现的地方,父类未必可以胜任。
3.如果只是想使用父类的方法,尽量不要使用继承,可以使用依赖、聚合、组合等方式
4.当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。(参考链接
5.覆盖或实现父类方法时输出结果可以被缩小
6.子类中可以增加自己特有的方法。但是应当尽量避免子类增加自己特有的方法,一旦子类增加自己特有的方法,这个子类和父类之间的关系将难以调和。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值