当重载同一方法显示(String s)和显示(Object o)时,当从main方法传递null时为什么调用display(String s)?

时间:2014-08-27 07:11:46

标签: java

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)

4 个答案:

答案 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首先查找最接近的匹配。它试图找到以下内容:

  1. 按类型精确数学

  2. 匹配超类类型

  3. 转换为更大的基本类型

  4. 转换为自动装箱类型

  5. 所以在你的重载方法中String类是closets子类的对象类。