Explicación de la salida del fragmento de código Java requerida

Mi código es:

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 TestClass {
  public static void main(String[]args) {
    Foo f = new Bar();
    f.addFive();
    System.out.println(f.a);
  }
}

Salida:

b 3

Por favor, explícame, ¿por qué el resultado de esta pregunta es "b 3" y no "b 13" ya que el método ha sido anulado?

Respuestas a la pregunta(4)

Su respuesta a la pregunta