В чем различие между приватным конструктором и финальным классом?
Если установить модификатор видимости для конструктора класса private, то его нельзя будет запустить из класса наследника, а это означает что наследование станет невозможным. Эту возможность обычно используют для создания утилитарных классов и в паттерне singleton.
Модификатор final запрещает наследование от исходного класса.
Таким образом ограничение с использованием модификатора private слабее, чем через модификатор final. Его наследниками могут стать внутренние, а также вложенные классы. Если завести вложенный public-класс, то внешние классы смогут стать наследниками через него.
class Nonlnheritable {
private NonInheritable() {}
public static class PublicMorozov extends Nonlnheritable {}
}
class Subclass extends Nonlnheritable.PublicMorozov {
// Технически, это наследник Nonlnheritable. Никакой ошибки!
}
Бесплатные Telegram-боты для обучения
Практика с проверкой кода и помощью ИИ-ментора
AndroidSprint AI Mentor
Проверяет Pull Request'ы в GitHub, проводит тестовые собеседования с голосом и таймером, помогает разбираться с кодом 24/7
Попробовать ИИ-ментора →KotlinSprint Bot
22 урока Kotlin, 220 тестов, 120 практических задач с код-ревью
Начать обучение Kotlin →