Domanda

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?

È stato utile?

Soluzione

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

Altri suggerimenti

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top