Основная предпосылка наличия частного конструктора состоит в том, что наличие частного конструктора ограничивает доступ к коду, отличному от кода собственного класса, от создания объектов этого класса.
Да, у нас могут быть частные конструкторы в классе, и да, их можно сделать доступными, создав некоторые статические методы, которые в свою очередь создают новый объект для класса.
Class A{
private A(){
}
private static createObj(){
return new A();
}
Class B{
public static void main(String[]args){
A a=A.createObj();
}}
Таким образом, чтобы создать объект этого класса, другой класс должен использовать статические методы.
Какой смысл иметь статический метод, когда мы делаем конструктор закрытым?
Существуют статические методы, так что в случае необходимости создания экземпляра этого класса могут быть некоторые предопределенные проверки, которые можно применять в статических методах перед созданием экземпляра. Например, в классе Singleton статический метод проверяет, был ли экземпляр уже создан или нет. Если экземпляр уже создан, он просто возвращает этот экземпляр, а не создает новый.
public static MySingleTon getInstance(){
if(myObj == null){
myObj = new MySingleTon();
}
return myObj;
}