请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。 为什么里氏替换原则这样规定?

当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。 为什么里氏替换原则这样规定?

正在回答 回答被采纳积分+3

2回答

慕UI4021841 2021-12-13 23:00:53

当方法重载的时候入参存在父子类的情况下,程序先会调用入参为子类的方法。如果子类重载的时候,子类入参是比父类入参更严格(即入参是父类 入参的子类的情况),调用时就会调用子类的方法,这样相当于调用时将父类方法覆盖了,而里氏替换原则含义1:子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。所以违反了里氏替换原则。

首先你先明白下面代码执行的结果再来看,为什么里氏替换原则能延伸出上述规定。

public static void method(Object obj){
    System.out.println("is obj...");
}

public static void method(String str){
    System.out.println("is str...");
}
public static void main(String[] args) {
    method(null);
}


4 回复 有任何疑惑可以回复我~
honorbound 2021-12-28 16:53:42

一个软件实体如果适用一个父类的话,那一定适用于其子类,所有引用父类的地方必须能透明的使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。

https://img1.sycdn.imooc.com//szimg/61cad50909de3d1908810565.jpg

如果要调用子类的重写方法就要修改代码了

https://img1.sycdn.imooc.com//szimg/61cad5340977b2c310220562.jpg

这样就不符合定义了

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信