Какие последствия у объявления конструктора класса как private?

«Какие последствия у объявления конструктора класса как private?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Объявление конструктора private имеет следующие последствия:

  1. Инкапсуляция создания: Невозможно создать экземпляр класса извне оператором new MyClass().
  2. Контроль над экземплярами: Создание объектов возможно только внутри самого класса (например, через статические фабричные методы).
  3. Применение в паттернах проектирования:
    • Singleton — гарантия единственного экземпляра.
    • Factory Method — скрытие логики создания.
    • Utility-класс (только статические методы) — запрет инстанцирования.

Пример Singleton с ленивой инициализацией:

public class Singleton {
    private static Singleton instance;

    // Private конструктор
    private Singleton() {
        // Инициализация
    }

    // Статический фабричный метод
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton(); // Вызов возможен только здесь
        }
        return instance;
    }
}
// Использование:
Singleton obj = Singleton.getInstance(); // Единственный способ получить объект

Важно: Если все конструкторы приватные и нет статических методов, создание экземпляров класса становится невозможным.