public class Father { 
public Collection doSomething(HashMap map){
System.out.println("父类被执行...");return map.values();}
}
public class Son extends Father {
//放大输入参数类型
public Collection doSomething(Map map){
System.out.println("子类被执行...");
return map.values();
}
}
public class Client {
public static void invoker(){
//父类存在的地方,子类就应该能够存在
Son f =new Son();
HashMap map = new HashMap();
f.doSomething(map);
}
public static void main(String[] args) {invoker();
}
}
为什么说“父类方法的输入参数是HashMap类型,子类的输入参数是Map类型,也就是说子类的输入参数类型的范围扩大了,子类代替父类传递到调用者中,子类的方法永远都不会被执行”?
难道不是子类继承了父类的public Collection doSomething(HashMap map)进而使invoker调用时只能调用到父类的函数,如果是Map map = new Map();
f.doSomething(map);那么就应该可以调用子类的public Collection doSomething(Map map);不然重载就没什么意义了,是不是呢?谢谢!

解决方案 »

  1.   

    为什么说“父类方法的输入参数是HashMap类型,子类的输入参数是Map类型,也就是说子类的输入参数类型的范围扩大了,子类代替父类传递到调用者中,子类的方法永远都不会被执行”?.../....啥意思??谁说的???
      

  2.   

    所以理解不了。而且后面还有个例子:
    public class Father { 
    public Collection doSomething(Map map){
    System.out.println("父类被执行...");return map.values();}
    }
    public class Son extends Father {
    //放大输入参数类型
    public Collection doSomething(HashMap map){
    System.out.println("子类被执行...");
    return map.values();
    }
    }
    public class Client {
    public static void invoker(){
    //父类存在的地方,子类就应该能够存在
    Son f =new Son();
    HashMap map = new HashMap();
    f.doSomething(map);
    }
    public static void main(String[] args) {invoker();
    }
    }
    结果:子类被执行..
    我感觉应该执行不出结果吧。没有匹配的重载函数呀!
      

  3.   

    你明明重载了doSomething,入参为HashMap,怎么叫没有匹配的重载函数呢?HashMap hashmap = new HashMap();
    Map map = new HashMap();
    f.doSomething(hashmap);
    f.doSomething(map);
    //子类被执行...
    //父类被执行...