문제

A extends B

public class Test {

public static void print(A obj) {
    System.out.println("print A");
}

public static void print(B obj) {
    System.out.println("print B");
}

public static void main(String [] args ) {  
    A x = new B();

    print(x);
}

}

Why it'll print "print A"? Why function overloading doesn't look up the real type of x in runtime?

도움이 되었습니까?

해결책

Because overloading is not overriding. The compiler binds methods based on the declared types of arguments.

다른 팁

Why function overloading doesn't look up the real type of x in runtime?

Because function overloading doesn't look up the real type of x at runtime, by JLS #8.4.9: "the number of actual arguments (and any explicit type arguments) and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked".

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top