The simple explanation is if there is no constructor in a class, the compiler automatically creates a default constructor.
The constructor is not always declared as public, it can also be private, protected, or default.
The private constructors prevent a class from fully and clearly expressed/represented by its callers. In that case private constructors are useful. And if if we do not need our class to be sub-classed, we can use private constructors.