重载时里氏替换原则
来源:3-10 里氏替换原则coding
坏淡一个
2018-12-15
父类:
public class Base {
public void method(Map map) {
System.out.println("父类入参方法");
}
}
子类:
public class Child extends Base {
public void method(HashMap map) {
System.out.println("子类HashMap入参方法被执行");
}
}
测试类:
public class Test {
public static void main(String[] args) {
Child child = new Child();
Map map = new HashMap();
child.method(map);
}
}
执行结果:父类入参方法
这样看,子类比父类输入参数更窄,并没有比父类宽松,也不违反里氏替换原则啊
写回答
2回答
-
同学,你好,我是geely老师的助教。
关于你这个问题,其实Base类中的method和Child里面的method是两个没有任何关联的方法哦,只是因为它们名字相同而已,method(HashMap map)是你在子类中增加的特有方法,并不是重载类Base类的method方法,请同学详细了解一下java的重载机制哦。
如果还有其他疑问,请留言告知。
希望能帮助到你。
232019-01-14 -
new_chapter
2019-03-15
我觉得这个问题很好,回答并没有让我完全理解这个问题。
Child类里的method其实是重载了继承自Base的method方法。说是两个不同的方法也对。
既然按照两个不同的方法去理解,那么就取决于应用是怎么去调用的。如果Test类中传入参数是Map,则调用更宽松参数的那个方法;如果Test类中传入HashMap,则调用更严格参数的方法。
既然取决于调用的方式,如果调用的参数和父类保持一致,那么就符合里氏替换原则吧?
那么为什么在子类中实现更宽松参数的方法 要比 在父类实现更宽松参数的方法高明呢?
012022-02-28
相似问题