Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重载方法的首选参数转换记录在哪里(如果有)?_Java_Compiler Construction_Arguments_Overloading - Fatal编程技术网

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(); //

换句话说,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();
        // 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的相关部分是。规则复杂且技术性强,但一般原则是选择具有最具体参数类型的适用方法