This week's book giveaway is in the General Computing forum. We're giving away four copies of Arduino in Action and have Martin Evans, Joshua Noble, and Jordan Hochenbaum on-line! See this thread for details.
i dont understand why this code compiles properly?
class A { public A() {} // A1 public A(String s) { this(); System.out.println("A :"+s); } // A2 } class B extends A { public int B(String s) { System.out.println("B :"+s); return 0; } // B1 } public class C extends B { private C(){ super(); } // C1 public C(String s){ this(); System.out.println("C :"+s); } // C2 public C(int i){} // C3
public static void main(String[] args) { C c = new C(); } }
Since there is no no-arg constuctor in B ( we need to type it in because we have defined ome other constructor) , wont calling the super() from line C1 cause a compiler error?? what am i missing here?
I guess, you must have got confused with the name of the method in B. If you see, there is no construtor defined in class B and hence compiler provides a default constructor. In fact at the very first glance even I thought like you and even executed it keep a println statement in no arg construtor A . This is one of the serious traps in SCJP exam, which we should be care enough.