Java 关于方法重载的澄清
我有以下代码,我需要一些关于重载概念的澄清 当我执行此操作时,输出是字符串。尽管Java 关于方法重载的澄清,java,string,overloading,Java,String,Overloading,我有以下代码,我需要一些关于重载概念的澄清 当我执行此操作时,输出是字符串。尽管object是超类,为什么它显示string而不是object 预先感谢,因为当有一个精确匹配时,在重载函数中,JVM不会考虑泛化。i、 它将寻找与参数类型匹配的最佳匹配。在本例中,“Hello”与字符串类型完全匹配。因为字符串比对象更适合字符串。因此不会考虑 static void print(Object o) 之所以称为stringprint,是因为您传递了“Hello”,它是string对象 String还
object
是超类,为什么它显示string
而不是object
预先感谢
,因为当有一个精确匹配时,在重载函数中,JVM不会考虑泛化。i、 它将寻找与参数类型匹配的最佳匹配。在本例中,“Hello”与字符串类型完全匹配。因为
字符串
比对象
更适合字符串
。因此不会考虑
static void print(Object o)
之所以称为
string
print,是因为您传递了“Hello”
,它是string
对象
String
还扩展了常规的对象
,但重载调用也是最高级的类型。当前,此版本的重载方法执行:
static void print(String s){
System.out.println("string");
}
既然你这样打电话:
print(“你好”)代码>
只有当且仅当未找到匹配的正确版本时,才会发生数据转换。并找到编译器的精确匹配项。本例中的规则是:
更具体的签名将适用
String
比Object
更具体,这就是为什么使用print(String)
。例如,在main
中尝试print(null)
,您会发现这样的代码甚至不会编译,因为编译器无法区分null
是字符串还是对象
首先检查JVM
查看打印(字符串)
,如果未找到,它将使用字符串的超类参数搜索print()
。如果仍然未找到,则为字符串的超类的超类
。这个算法一直持续到出现打印(对象)
。或报告错误
static void print(String s){
System.out.println("string");
}