I have a behaviour that I don't understand with overloading in Java.
Here is my code:
interface I {}
class A implements I {}
class B {
   public void test(I i) {}
   public void test (A a) {}
}
When I call the following line:
 I a = new A();
 b.test(a);
I thought the called method would be test(A) but visibly it's test(I).
I don't understand why. In runtime my variable a is a A even A inherits I.
Because the reference type is of I eventhough you have object of type A.
A a = new A();
will invoke method test (A a) {}
As per JLS Chapter 15:
The most specific method is chosen at compile-time; its descriptor determines what method is actually executed at run-time.
The variable a is of type I -- if you were to use A a = new A(); it would use the correct overloaded method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With