Does anyone know why this code prints out 0 4 3?

class A {
public void m() { }
public A() {
m();
}
}
class B extends A {
private int f = 4;
public void m() {
System.out.println(f);
}
public B() {
m();
f = 3;
m();
}
}
public class Init {
public static void main(String[] args) {
B b = new B();
}
}