私はJavaの世界に不慣れであり、ポリモーフィズムがある場合にJavaがどのメソッドを呼び出すかを決定する方法を理解するのにいくつかの問題があります。この例でどのように機能するかを理解するのを手伝ってもらえますか?コードを試して、結果を確認しました。なぜこのように機能するのか、もっと興味があります。
class A {
void redef(A a) { System.out.println("[A]"); }
}
class B extends A {
//@Override
void redef(B b) { System.out.println("[B]"); }
}
class C extends B {
}
public class Surcharge {
static void surcharge(A a) { System.out.println("[A]"); }
static void surcharge(B b) { System.out.println("[B]"); }
public static void main(String[] argv) {
A a = new A() ;
B b = new B() ;
A ab = new B();
C c = new C();
ab.redef(c); //?
surcharge(a); //?
surcharge(b); //?
surcharge(c); //?
surcharge(ab); //?
}
}