This is not the way you are percieving.Actually Only 1 object will be created in this scenario and the constructor calls will be same as you have stated.
constructor call is required to initialize those members of the super classes which are derived from the super class in derived class. As the data members which are being derived into the derived class need to be initialized by their respective constructors(constructors are not inherited).
In case of Abstract class ,its true that they can't be instantiated but if some class has extended it in that case the members of that abstract class derived into the Sub class need to be initialized by the constructor of Abstract class only.
Hi Guys!!! I had exactly the same doubt that is stated in the original Q. Didnt know where to look for. Thanks to Java Ranch found the soln. here. Java ranch rocks [ ]. I however in the mean time was wondering how could i write/test the code to find out how many objects get created. Any idea how can we modify the above code to find out the number of objects created?