Java 重载方法的首选参数转换记录在哪里(如果有)?
换句话说,Java编译器如何确定选择执行哪个重载方法的确切规则是什么?我花了很多时间在谷歌上搜索,我认为我没有使用正确的搜索关键字Java 重载方法的首选参数转换记录在哪里(如果有)?,java,compiler-construction,arguments,overloading,Java,Compiler Construction,Arguments,Overloading,换句话说,Java编译器如何确定选择执行哪个重载方法的确切规则是什么?我花了很多时间在谷歌上搜索,我认为我没有使用正确的搜索关键字 public class C1 extends C2 {} public class C2 extends C3 {} public class C3 {} public class Test { public static void main(String[] args) { C1 c1 = new C1(); //
public class C1 extends C2 {}
public class C2 extends C3 {}
public class C3 {}
public class Test {
public static void main(String[] args) {
C1 c1 = new C1();
// What are the precise rules for determining
// which method below is called?
method(c1, c1);
}
static public void method(C3 test, C3 test2) {
System.out.println("C3");
}
static public void method(C2 test, C3 test2) {
System.out.println("C2");
}
}
我认为这是在
我可以从那里看到,这一定是一个不断扩大的引用转换,但我没有看到任何关于路径的评论。在我看来,它似乎在搜索最短的匹配路径(在继承树中),因为这是最符合逻辑的,但同样,我在规范中找不到它。JLS的相关部分是。规则复杂且技术性强,但一般原则是选择具有最具体参数类型的适用方法