Pergunta

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?

Foi útil?

Solução

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

Outras dicas

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".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top