If you are using abstract classes, protected constructors come very handy. Obviously, the abstract class can not be instantiated. Why have a constructor? For the following reason: The abstract class will be extended by concrete subclasses. If you have more than one such concrete subclass, they all share the members of the abstract super class. How do you initialize these super class member variables? Or better yet, let's assume that you have to get a resource each time you instantiate any of these subclasses. Rather than have the code to get the resource in all the constructors of these subclasses, it's better to have a protected constructor in the superclass, then call the super class constructor from the subclass. To summarize, if you have an abstract class, and if all the subclasses of this abstract class have some common functionality at the time of creating a new instance, that functionality can be included in a protected constructor in the abstract super class and this constructor could be called by the constructors in the subclasses. Hope this Helps!