null
是一个引用,它只是null
类型,即null
不是对象类型.但是,当我运行下面的代码片段我很惊讶,当我传递null方法method(null);
调用method(String s)
没有method(Object o)
.
如果null
本身由Java定义的,而不是对象类型的类型,那么为什么它叫method(String s)
不method(Object o)
?
public class Test {
public static void main(String[] args) {
method(null);
}
public static void method(Object o) {
System.out.println("Object impl");
}
public static void method(String s) {
System.out.println("String impl");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我添加了一个方法:
public static void method(Integer s) {
System.out.println("String impl11");
}
Run Code Online (Sandbox Code Playgroud)
现在编译器给出了错误The method method(Object) is ambiguous for the type Test
.
Integer a = null;
Run Code Online (Sandbox Code Playgroud)
如果它是合法的,那么为什么我会看到编译时异常?
Era*_*ran 11
null
可分配给任何引用类型.当涉及到方法重载时,编译器总是更喜欢具有更具体的参数类型的方法.因此,带String
参数的方法优于带Object
参数的方法,因为它String
是一个子类Object
.
另一方面,如果选择在具有不相关参数类型的方法之间 - 例如method(String s)
和method (Integer i)
- 代码将不会通过编译,因为没有一个选项优先于另一个.
归档时间: |
|
查看次数: |
268 次 |
最近记录: |