Рассмотрим переменные int a
в этих классах:
class Foo {
public int a = 3;
public void addFive() { a += 5; System.out.print("f "); }
}
class Bar extends Foo {
public int a = 8;
public void addFive() { this.a += 5; System.out.print("b " ); }
}
public class test {
public static void main(String [] args){
Foo f = new Bar();
f.addFive();
System.out.println(f.a);
}
}
Я понимаю, что метод addFive()
был переопределен в дочернем классе, а в тесте класса, когда ссылка базового класса, ссылающаяся на дочерний класс, используется для вызова переопределенного метода, вызывается версия дочернего класса addFive
.
Но как насчет переменной public экземпляра a
? Что происходит, когда и базовый класс, и производный класс имеют одну и ту же переменную?
Вывод вышеуказанной программы
b 3
Как это происходит?