Рассмотрим ниже код
class A
{
int x = 5;
void foo()
{
System.out.println(this.x);
}
}
class B extends A
{
int x = 6;
// some extra stuff
}
class C
{
public static void main(String args[])
{
B b = new B();
System.out.println(b.x);
System.out.println(((A)b).x);
b.foo();
}
}
Вывод программы
6
5
5
Я понимаю первые два, но не могу окунуться в последнюю. Как b.foo() печатает 5. Класс B наследует метод foo. Но не следует ли печатать, что будет печатать bx? Что именно здесь происходит?