方法重载相关:当null作为参数传递时
Method overloading related: when null is passed as a paramater
任何人都可以解释当 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);
}
}
编译时错误:-
方法 method(Object) 对于类型 TestThis
不明确
编译器发现您有 两个 方法,它们都可以将 Object 作为参数(因为双精度数组是一个对象,也是)。
所以,当你只传递null时,编译器无法判断你要调用哪个方法。
什么会起作用:
new TestThis().method((double[]) null);
郑重声明:问题是 - 这与 多态性 无关,它与重载有关。编译器必须 修复 在 编译时 调用哪些重载方法。因此,如果您的源代码没有提供足够的信息来做出该决定,就会向您抱怨。
准确地说:在您的第一个示例中,有两种方法,编译器为 (Object) 选择了一种。
但是在你的第二个例子中,你得到了 三个 方法,其中两个比 (Object) 更具体。这就是它拒绝编译示例 2 的原因。
选择具有最具体/最少通用类型的方法。 Object
是所有其他 class 的 superclass,因此,在第一种情况下,选择 int[] intArray
方法。
第二种情况,你有2个类型在同一级别,这会导致编译问题。您不能有 String
和 StringBuilder
,因为它们在 class 层次结构中处于同一级别。您可以有 Exception
、IOException
,因为它们处于不同的级别。
null
可以传递给任何将引用类型作为参数的方法,但同时您需要确保您没有采用同一级别类型的方法。
任何人都可以解释当 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);
}
}
编译时错误:- 方法 method(Object) 对于类型 TestThis
不明确编译器发现您有 两个 方法,它们都可以将 Object 作为参数(因为双精度数组是一个对象,也是)。
所以,当你只传递null时,编译器无法判断你要调用哪个方法。
什么会起作用:
new TestThis().method((double[]) null);
郑重声明:问题是 - 这与 多态性 无关,它与重载有关。编译器必须 修复 在 编译时 调用哪些重载方法。因此,如果您的源代码没有提供足够的信息来做出该决定,就会向您抱怨。
准确地说:在您的第一个示例中,有两种方法,编译器为 (Object) 选择了一种。
但是在你的第二个例子中,你得到了 三个 方法,其中两个比 (Object) 更具体。这就是它拒绝编译示例 2 的原因。
选择具有最具体/最少通用类型的方法。 Object
是所有其他 class 的 superclass,因此,在第一种情况下,选择 int[] intArray
方法。
第二种情况,你有2个类型在同一级别,这会导致编译问题。您不能有 String
和 StringBuilder
,因为它们在 class 层次结构中处于同一级别。您可以有 Exception
、IOException
,因为它们处于不同的级别。
null
可以传递给任何将引用类型作为参数的方法,但同时您需要确保您没有采用同一级别类型的方法。