class A { }

class B extends A { }

class C extends B { }

public class MainClass  {

    static void overloadedMethod(A a) {
        System.out.println("1");
    }

    static void overloadedMethod(B b) {
        System.out.println("2");
    }

    static void overloadedMethod(Object obj) {
        System.out.println("3");
    }

    public static void main(String[] args) {
        C c = new C();
        overloadedMethod(c);
    }
}


该继承程序在执行时给出输出2。怎么样?

最佳答案

好吧,可以将类C的实例传递给这三个overloadedMethod方法中的任何一个,因此编译器选择其参数具有最特定类型的方法-static void overloadedMethod(B b)-因为B是该方法的子类。 AObject的子类,因此BAObject更具体。

10-06 06:24