您的位置:首页 > 其它

重载方法调用精确匹配问题

2016-04-02 22:46 176 查看
判断到底调用了哪个方法

package example;
public class Test{
public void info(Object obj,double count){
System.out.println("obj参数为"+obj);
System.out.println("count参数为"+count);
}
public void info(Object[] objs,double count){
System.out.println("objs参数为"+objs);
System.out.println("count参数为"+count);
}
public static void main(String[] args) {
Test t=new Test();
t.info(null, 5);
}
}


由于第一个参数是null,既匹配第一个info()也匹配第二个info(),这时候会匹配哪个呢

objs参数为null
count参数为5.0

根据输出结果我们发现调用个第二个方法。

根据精确匹配原则,当实际调用时传入的实参同时满足多个方法时,如果某个方法要求的参数范围越小,那这个方法就越精确,

很明显,Object[]可以看做Object的子类,范围更小。

但当我们队第二个参数类型做出改变时

package example;
public class Test{
public void info(Object obj,int count){
System.out.println("obj参数为"+obj);
System.out.println("count参数为"+count);
}
public void info(Object[] objs,double count){
System.out.println("objs参数为"+objs);
System.out.println("count参数为"+count);
}
public static void main(String[] args) {
Test t=new Test();
// t.info(null, 5); 编译失败
}
}


编译失败的原因时,JVM无法判断更匹配实际调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: