В чем различие между приватным конструктором и финальным классом?

Если установить модификатор видимости для конструктора класса private, то его нельзя будет запустить из класса наследника, а это означает что наследование станет невозможным. Эту возможность обычно используют для создания утилитарных классов и в паттерне singleton.

Модификатор final запрещает наследование от исходного класса.

Таким образом ограничение с использованием модификатора private слабее, чем через модификатор final. Его наследниками могут стать внутренние, а также вложенные классы. Если завести вложенный public-класс, то внешние классы смогут стать наследниками через него.

class Nonlnheritable {
  private NonInheritable() {}
  public static class PublicMorozov extends Nonlnheritable {}
}
 
class Subclass extends Nonlnheritable.PublicMorozov {
  // Технически, это наследник Nonlnheritable. Никакой ошибки!
}
Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *