java替代原则_Java设计模式之里氏替换原则

里氏替换原则的主要思想是:继承必须确保超类所拥有的性质在子类中仍然成立。

里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,里氏替换原则是继承复用的基础,它反映了基类和子类的关系。

里氏替换原则的作用:克服了继承中重写父类造成的可复用性变差的缺点。

保证了动作的正确性。即类的扩展不会给已有的系统引入新的错误。

里氏替换原则通俗地讲就是:子类可以扩展父类的功能,但是不能父类原有的功能。也就是说子类继承父类的时候,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

如果程序违背了里氏替换原则,则继承类的对象在基类出现的地方可能会出现错误。例如继承类重写了基类的某个方法,这程序中通过基类访问继承类的方法,但是继承类重写的方法与基类中该方法的行为不一致。解决方法就是解除原来的继承关系,重新设计他们的关系。

下面通过“几维鸟不是鸟”的例子来具体理解里氏替换原则。

几维鸟虽然属于鸟类,但是由于翅膀退化不能飞。

鸟类代码:

class Bird {

private double flySpeed;

public void setFlySpeed(double speed) {

flySpeed = speed;

}

public double getFlyTime(double distance) {

return distance / flySpeed;

}

}

燕子类:

class Swallow extends Bird {

}

几维鸟类:

class BrownKiwi extends Bird

{

public void setSpeed(double speed)

{

flySpeed=0;

}

}

由于几维鸟不能飞行,因此我们需要重写setSpeed方法,将飞行速度设置为0。

主方法:

public class Liskov {

public static void main(String[] args) {

Bird swallow = new Swallow();

Bird brownKiwi = new BrownKiwi();

swallow.setFlySpeed(120);

brownKiwi.setFlySpeed(120);

System.out.println(swallow.getFlyTime(300));

System.out.println(brownKiwi.getFlyTime(300));

}

}

输出:

程序运行不符合预期的原因是违背了里氏替换原则,正确的做法应该是取消几维鸟原来的继承关系,定义鸟和几维鸟更一般的父类,如动物类。里氏替换原则--面向对象设计原则​c.biancheng.netebffaf7185153cf312807416ac59a363.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值