重载时里氏替换原则
来源: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
相似问题
 
						