Вот краткий пример приведения дочернего класса к родительскому, а затем вызова метода.
Я ожидал, что метод foo будет вызван в дочернем классе, а не в родительском классе. Но я получаю ошибку компиляции, говорящую, что у родительского класса нет этого метода.
Почему Java заботится о том, есть ли у родительского класса, если я вызываю его только в дочернем классе?
public static void main(String[] args)
{
A a = new A();
B b = new B();
b.foo(1, 2, 3); // Ok
((A) b).foo(1, 2); // Also ok.
// Prints "In foo(int, int) method of class B"
((A) b).foo(1, 2, 3); // Will not compile
}
// позже в коде ...
class A
{
public int foo(int a, int b)
{
System.out.println("In foo(int, int) method of class A");
return 1;
}
}
class B extends A
{
public int foo(int a, int b)
{
System.out.println("In foo(int, int) method of class B");
return 0;
}
public int foo(int a, int b, int c)
{
System.out.println("In foo(int, int, int) method of class B");
return -1;
}
}