我从this site找到了这个Java代码。我不明白它如何编译而没有模棱两可的错误。
package swain.test;
public class Test {
public static void JavaTest(Object obj) {
System.out.println("Object");
}
public static void JavaTest(String arg) {
System.out.println("String");
}
public static void main(String[] args) {
JavaTest(null);
}
}
输出:
String
答案 0 :(得分:6)
null
可以传递给JavaTest(String arg)
和JavaTest(Object obj)
,因此编译器会选择具有更具体参数类型的方法。由于String
比Object
更具体(String
是Object
的子类),因此选择了JavaTest(String arg)
。
如果您JavaTest(Object obj)
代替JavaTest(Integer obj)
,则编辑将失败,因为Integer
并不比String
和String is not more specific than
整数更具体,所以编译器无法做出选择。