当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类型
是不明确的答案 0 :(得分:1)
编译器发现你有两个方法,它们都可以将 Object 作为参数(因为double的数组也是一个Object)。
因此,当您只传递null时,编译器无法判断您要调用哪个方法。
取而代之的是:
ssl://localhost:10031/
对于记录:事情是 - 这不是关于多态,而是关于重载。编译器必须修复在编译时调用哪些重载方法。因此,如果您的源代码没有提供足够的信息来做出该决定,则向您抱怨。
确切地说:在第一个例子中,有两种方法,编译器为(Object)选择一种方法。
但是在你的第二个例子中,你有三个方法,两个比(Object)更具体。这就是它拒绝编译示例2的原因。
答案 1 :(得分:1)
选择具有最特定/最不通用类型的方法。 Object
是所有其他类的超类,因此,在第一种情况下,选择了int[] intArray
方法。
在第二种情况下,您在同一级别有2种类型,这将导致编译问题。您不能拥有String
和StringBuilder
,因为它们位于类层次结构中的同一级别。您可以Exception
,IOException
,因为它们处于不同的级别。
null
可以传递给任何以引用类型作为参数的方法,但同时您需要确保没有方法来获取处于同一级别的类型。