Constructors can have all kind of access modifiers. The usage of different access modifier on constructors are different.
You make a constructor public if you want the class to be instantiated from any where.
You make a constructor protected if you want the class to be inherited and its inherited classes be instantiated.
You make a constructor private if you want the class to be instantiated just from its own members usually a static block or static method. It means that you take control of instantiating the class and apply some rule on instantiation. Example of usage of private constructor is singleton design pattern.