Shafeeq,
1) Create an object of class B.
The default constructor for B is public B() {}. It is created by the
java compiler for you. This default constructor also calls its super class's default constructor public A() {}.
2) Create an object of class C using the constructor public C(String msg) { this(); }.
This constructor call its own default constructor this(). It therefore creates an object of class B (See 1 above). B in turns calls the default constructor of A.
3) Create an object of class C using the constructor C(int) {}.
This constructor implicitly call B's default construcotr. It therefore creates an object of class B (See 1 above).
B also calls the default constructor of A.
4) You cannot call the private constructor C() { super(); } outside the class because it is private.
As you can see there is no such path that calls the constructor public A(int i) { this(); }. Therefore answer B is also correct.
Edward