关于面向对象原则里氏替换的疑问
里氏替换原则里面有“一个软件实体如果使用的是一个基类的话,那么一定适用于其子类。而且它觉察不出基类对象和子类对象的区别。也就是说,在软件里面,把基类都替换成它的子类,程序的行为没有变化。”
我暂时理解为在父类作为参数或类型使用时他的子类将替换父类进行操作。
然后我看到的一个例子却让我迷惑了
import java.util.Collection;import java.util.Map;/** * 父类 * @author LZG * */public class Father { public Collection doTo(Map map) { System.out.println("父类被执行。。。"); return map.values(); }}
import java.util.Collection;import java.util.HashMap;public class Son extends Father{ public Collection doTo(HashMap map) { System.out.println("子类被执行。。。"); return map.values(); }}
import java.util.*;public class Test { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 Father f=new Son(); HashMap map=new HashMap(); f.doTo(map); }}