public class A { public String show(A o) { return "A-A"; } }
public class B extends A {
public String show(A o) { return "B-A"; }
public String show(B o) { return "B-B"; }
}
A x = new B();
A y = new B();
System.out.println(x.show(y));What is printed?
- Acheck_circle
B-A
- B
Compile-time error
- C
A-A
- D
B-B
Explanation
Method overload selection uses compile-time types of arguments. y is declared A, so show(A) is selected; runtime dispatch picks B.show(A), returning "B-A".