Проблемы с пониманием того, почему выходные данные «3» и «4» для двух вызовов функций. Ибовызов функции полиморфизма Java
g2.foo(t1);
Во время компиляции, g2 является тип А, он ищет Foo (тип C), что он не находит в своем основном классе, так что он смотрит на ее детей класса В, то С. Поэтому foo (...) следует связывать с
public void foo(C p) {
System.out.println("5");
}
является подклассом C справа?
Затем во время выполнения g2 будет иметь тип C и вызывает foo (C p), что приведет к выходу «5». Я не уверен, где моя логика/понимание полиморфизма неверна.
class A {
public void foo(A p) {
System.out.println("1");
}
}
class B extends A {
public void foo(B p) {
System.out.println("2");
}
}
class C extends B {
public void foo(A p) {
System.out.println("3");
}
public void foo(B p) {
System.out.println("4");
}
public void foo(C p) {
System.out.println("5");
}
}
public class HelloWorld {
public static void main(String[] args) {
A g2 = new C();
B r2 = new C();
C t1 = new C();
g2.foo(t1); // 3
r2.foo(new C()); // 4
}
}