Я учусь на Java-экзамене и у меня есть вопрос, касающийся статических и динамических типов.
У меня есть 4 класса: A, B, C и Main.
public class A {
private void tell(){
System.out.println("AA");
}
}
public class B extends A {
public void tell(){
System.out.println("BB");
}
}
public class C extends B {
}
public class Main{
public static void main(String[] args) {
A c = new C();
c.tell();
}
}
Мое предложение было таким: вывод должен быть "BB", потому что c имеет динамический тип C. Поскольку у C нет метода "сказать", используется метод высшего класса B,который печатает «BB».
В результате, однако, возникает ошибка, потому что Java ищет слово «tell» в A. В A он, конечно, не может его найти, потому что там он объявлен priavte.Но почему он выглядит в A, хотя только статический тип - A, а динамический тип - C?