Matthew Brown wrote:Here's what's going on...
You aren't specifying a constructor for the B class. So the compiler inserts a default constructor, taking no arguments.
Because B is a subclass of A, any constructor of B must call a constructor of A. Again, if you omit this, the compiler will insert the call for you. But it can only insert a no-arg constructor like this. In the second case, there isn't a no-arg constructor. So if you want to inherit from B in that case you need to put in the constructor calls explicitly. For instance, like this:
Actually, writing that I've realised there were two problems. Your examples didn't have any constructors. They were ordinary methods - constructors don't have a return type.
vibhor sharma wrote:I doubt even first one works well ..
It is not a constructor , eventually a valid java method which happens to be a same name as a class name .... remember constructors doesn't have return type, not even void .
PS : In my opinion constructors cant be inherited , be it default one ...