Java 为什么输出字符串未传递到对象
为什么字符串传递而不是对象传递。来自 如果多个成员方法可访问且适用于 方法调用时,必须选择一个来提供 运行时方法分派的描述符。Java编程 语言使用的规则是选择最具体的方法 非正式的直觉是,如果可以传递第一个方法处理的任何调用,那么一个方法比另一个方法更具体 在没有编译时类型错误的情况下打开另一个。Java 为什么输出字符串未传递到对象,java,string,object,Java,String,Object,为什么字符串传递而不是对象传递。来自 如果多个成员方法可访问且适用于 方法调用时,必须选择一个来提供 运行时方法分派的描述符。Java编程 语言使用的规则是选择最具体的方法 非正式的直觉是,如果可以传递第一个方法处理的任何调用,那么一个方法比另一个方法更具体 在没有编译时类型错误的情况下打开另一个。 当您不键入cast时,它将根据最具体的选项进行选择。 null可以是字符串类型的引用,也可以是对象类型的引用。 因此,如果两者都可用,那么将调用String方法 public class test
当您不键入cast时,它将根据最具体的选项进行选择。
null
可以是字符串类型的引用,也可以是对象类型的引用。
因此,如果两者都可用,那么将调用String方法
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");
}
}
这将不再编译
它会说:不明确的方法调用。测试匹配中的magic(String)
和magic(Integer)
都可能是部分的重复,如果您添加(比如说)void magic(Integer s)
,那么程序将不再编译,因为对于更具体的方法将是什么,它将是模棱两可的。
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");
}
}