В чем различие между приватным конструктором и финальным классом?
Если установить модификатор видимости для конструктора класса private, то его нельзя будет запустить из класса наследника, а это означает что наследование станет невозможным. Эту возможность обычно используют для создания утилитарных классов и в паттерне singleton.
Модификатор final запрещает наследование от исходного класса.
Таким образом ограничение с использованием модификатора private слабее, чем через модификатор final. Его наследниками могут стать внутренние, а также вложенные классы. Если завести вложенный public-класс, то внешние классы смогут стать наследниками через него.
class Nonlnheritable {
private NonInheritable() {}
public static class PublicMorozov extends Nonlnheritable {}
}
class Subclass extends Nonlnheritable.PublicMorozov {
// Технически, это наследник Nonlnheritable. Никакой ошибки!
}
Готовьтесь к работе в команде
AI Sprints — обучение профессиям с ИИ
Освойте Agile, Scrum и Kanban. Поймёте, как устроены процессы в IT-командах — придёте на работу подготовленным
- Методологии: Agile и Scrum — как организованы спринты и роли в команде
- Инструменты: Jira, Git Flow, код-ревью — что используют в продакшене
- Результат: понимаете процессы и готовы к работе в IT-команде
AI Challenge — собери чат-бота за 5 дней
Бесплатный марафон по AI-инжинирингу. Cursor + OpenAI, 60 минут в день — без опыта в программировании. К пятнице у вас будет рабочий чат-бот с памятью в браузере.
- Практика с первого дня, без теории «в стол»
- Готовый проект в портфолио к концу недели
- Старт в любой день — учитесь в своём темпе