why a class can not be subclassed if i declare its default constructor as private
The constructor in the subclass must call a super constructor (which could be implicit or explicit), in order to fully construct the object. The super constructor call chain goes all the way up till the Object
class, the super class of all classes in Java.
If any of the super constructor is not visible to the subclass then there is no way to fully construct then object.
One way to get around this is to make the constructor in the super class protected
. That way the super constructors are only visible to the subclasses.