public class test {
public static void main(String[] args) {
magic(null);
}
public static void magic(String s) {
System.out.println("String passed");
}
public static void magic(Object o) {
System.out.println("object passed");
}
}
为什么字符串传递打印而不是对象传递。
答案 0 :(得分:4)
来自JLS
如果多个成员方法都可访问且适用于a 方法调用,有必要选择一个提供 运行时方法调度的描述符。 Java编程 language使用选择最具体方法的规则。
非正式的直觉是,如果第一种方法处理的任何调用都可以通过,那么一种方法比另一种方法更具体 没有编译时类型错误的另一个。
答案 1 :(得分:1)
如果不输入强制转换,则会根据最具体的选择进行选择。
null
可以是String
类型或Object
类型的引用。
因此,如果两者都可用,那么将调用String方法。
public class test {
public static void main(String[] args) {
magic(null);
}
public static void magic(Object o) {
System.out.println("object passed");
}
public static void magic(String s) {
System.out.println("String passed");
}
public static void magic(Integer s) {
System.out.println("Integer passed");
}
}
这将不再编译,
它会说:模糊的方法调用。测试匹配中的magic(String)
和magic(Integer)