Qué sucede cuando las clases base y derivadas tienen variables con el mismo nombre

Considera elint a variables en estas clases:

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);
    }
}

Entiendo que el métodoaddFive() se ha anulado en la clase secundaria y en la prueba de clase cuando la referencia de clase base que hace referencia a la clase secundaria se usa para llamar al método anulado, la versión de clase secundaria deaddFive se llama

Pero, ¿qué pasa con la variable de instancia públicaa? ¿Qué sucede cuando tanto la clase base como la clase derivada tienen la misma variable?

La salida del programa anterior es

b 3 

¿Como sucedió esto

Respuestas a la pregunta(4)

Su respuesta a la pregunta