方法重载相关:当null作为参数传递时

时间:2016-09-23 08:24:03

标签: java overloading

当null作为参数传递时,任何人都可以解释下面程序的输出

 public class TestThis {

        public void method(Object o){
            System.out.println("object method");
        }

    public void method(int[] intArray){
        System.out.println("int array method");
    }

    public static void main(String[] args) {
        new TestThis().method(null);
    }

}

输出: - int数组方法

public class TestThis {

    public void method(Object o){
        System.out.println("object method");
    }

    public void method(int[] intArray){
        System.out.println("int array method");
    }

    public void method(double[] doubleArray){
        System.out.println("double array method");
    }

    public static void main(String[] args) {
        new TestThis().method(null);
    }

}

编译时间错误: - 方法方法(Object)对于TestThis类型

是不明确的

2 个答案:

答案 0 :(得分:1)

编译器发现你有两个方法,它们都可以将 Object 作为参数(因为double的数组也是一个Object)。

因此,当您只传递null时,编译器无法判断您要调用哪个方法。

取而代之的是:

ssl://localhost:10031/

对于记录:事情是 - 这不是关于多态,而是关于重载。编译器必须修复编译时调用哪些重载方法。因此,如果您的源代码没有提供足够的信息来做出该决定,则向您抱怨。

确切地说:在第一个例子中,有两种方法,编译器为(Object)选择一种方法。

但是在你的第二个例子中,你有三个方法,两个比(Object)更具体。这就是它拒绝编译示例2的原因。

答案 1 :(得分:1)

选择具有最特定/最不通用类型的方法。 Object是所有其他类的超类,因此,在第一种情况下,选择了int[] intArray方法。

在第二种情况下,您在同一级别有2种类型,这将导致编译问题。您不能拥有StringStringBuilder,因为它们位于类层次结构中的同一级别。您可以ExceptionIOException,因为它们处于不同的级别。

null可以传递给任何以引用类型作为参数的方法,但同时您需要确保没有方法来获取处于同一级别的类型。