Java 中的方法重载解析
以下是我对java中重载解析的了解:
编译器尝试从给定的重载方法定义解析方法调用的过程称为重载解析。如果编译器找不到完全匹配项,则它仅使用上行转换来查找最接近的匹配项(从不执行下行转换)。
下面是一个类:
public class MyTest {
public static void main(String[] args) {
MyTest test = new MyTest();
Integer i = 9;
test.TestOverLoad(i);
}
void TestOverLoad(int a){
System.out.println(8);
}
void TestOverLoad(Object a){
System.out.println(10);
}
}
如预期的那样,输出为 10。
但是,如果我稍微更改类定义并更改第二个重载方法。
public class MyTest {
public static void main(String[] args) {
MyTest test = new MyTest();
Integer i = 9;
test.TestOverLoad(i);
}
void TestOverLoad(int a){
System.out.println(8);
}
void TestOverLoad(String a){
System.out.println(10);
}
}
输出为 8。
在这里,我很困惑。如果从未使用过下倾角,那么为什么8会被打印出来呢?为什么编译器选择了将取为参数的方法,该参数是从 到 向下转换的?TestOverLoad
int
Integer
int