Q:

When a member is initialized?

Consider the following classes:  
public class A {
    String bar = "A.bar";

    A() { foo(); }

    public void foo() {
        System.out.println("A.foo(): bar = " +
        bar);
    }
}

public class B extends A {
    String bar = "B.bar";

    B() { foo(); }

    public void foo() {
        System.out.println("B.foo(): bar = " +
        bar);
    }
}

public class C {
    public static void main(String[]
    args) {
        A a = new B();
        System.out.println("a.bar = "
        + a.bar);
        a.foo();
    }
}

Now, the first line printed is: B.foo(): bar = null. For my understanding, members initialization is prior to the constructor but I can see that this is not the case here.
Why at this phase B#bar isn't initialized?
When is B#bar is initialized?  
Thanks!
Update:
After reading your answers, please have a look at this counter-example:  
public class Bazz {

    public int a = 42;

    public Bazz() {
        System.out.println(a);
    }

    public static void main(String[] args) {
        Bazz bazz = new Bazz();
    }
}

At this case, a isn't 0. Instead, the constructor of Bazz() prints 42.
What's the difference?  

A:

Let me enumerate the steps:

A a  = new B(); // It sees that B is child of so calls A's constructor (B.bar not yet initialized)
In A's constructor foo is called. As it has been overridden by B so B's foo is called and displays null.
After A's constructor is finished B.bar is initialized.
Then B's constructor is called.

Note: even if super() is not called in B, the compiler automatically adds this statement.
EDIT: How compiler see's B's constructor:

super();
this.bar = "B.bar";
foo();

UPDATE: Your new result comes from the same explanation I gave earlier:

Bazz bazz = new Bazz(); // When the constructor is called the variable a is initialised to 42

System.out.println(a); // prints 42

The instance variables are intialized before the contructor is executed but after the super's contructor is executed. Refer to my edit above.

