package polymorphism;
/*
* @author Rahul Tripathi
*/
public class OverLoadingTest {
/**
* @param args
* @return
*/
static void display(String s){
System.out.println("Print String");
}
static void display(Object s){
System.out.println("Print Object");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
OverLoadingTest.display(null);
}
}
输出:
Print String
在上面的程序中
当重载方法display(String s )
和display(Object o)
时,当从main方法传递null
时,为什么只调用display(String s )
。为什么不叫display(Object o)
?
答案 0 :(得分:2)
在最佳/最接近匹配的基础上调用重载方法。 Object
是顶级类,这意味着它将在最后匹配。因此,匹配从采用String
参数的方法开始,因为字符串可以是null
,因此匹配并调用它。
答案 1 :(得分:1)
将选择匹配方法中的非泛型方法。
即,null
可以被接受为对象以及 String 但是由于String也是一个Object,编译器认为String具有更高的概率是null而不是Object。
答案 2 :(得分:0)
因为最好的closet匹配会发生重载,因为string和object是最后一个closet,因为所有类都是从java.lang.object继承的,所以它为什么会发生
答案 3 :(得分:0)
在java中存在多个重载方法时,java首先查找最接近的匹配。它试图找到以下内容:
按类型精确数学
匹配超类类型
转换为更大的基本类型
转换为自动装箱类型
所以在你的重载方法中String类是closets子类的对象类。