Как стать автором
Обновить

Abstract и Final class одновременно в языке программирования Java?!

Время на прочтение 1 мин
Количество просмотров 23K
Статья представляет авторское понимание главы из книги Effective Java, Second Edition by Joshua Bloch

Простым языком определим понятие абстрактного и финального класса:
Абстрактный класс не может быть инстанциирован, но он может иметь подклассы.
Финальный класс это класс от которого запрещено наследоваться.

Для более точного определения обратитесь к официальному туториалу:

Комбинация abstract и final для класса означает, что у класса не может быть наследников и нельзя создать экземпляр для данного класса.

Сделать класс abstract и final одновременно нам, например, необходимо когда мы ходим создать класс утилит, состоящих из статических методов (например java.lang.Math или java.util.Arrays).


Решение



public class UtilityClass {
  
  private UtilityClass() {
    throw new AssertionError();
  }
  
  ... // реализация статических методов
}


* This source code was highlighted with Source Code Highlighter.


Как известно, конструктор по умолчанию создается только если класс не содержит никаких явных конструкторов. Поэтому, определив у класса приватный конструктор без параметров мы обеспечим запрет на его инстанциирование из кода вне класса. AssertionError не является строго обязательным, но он обеспечивает страхование на случай, если конструктор случайно вызван из класса. Это гарантирует, что класс не будет инстанциирован при любых обстоятельствах (abstract). Эта идиома также предотвращает создание подклассов от данного класса(final). Все конструкторы должны вызывать конструктор суперкласса явно или неявно, а подклассы данного класса не будут иметь доступа к конструктору базового класса.
Теги:
Хабы:
+6
Комментарии 24
Комментарии Комментарии 24

Публикации

Истории

Работа

Java разработчик
344 вакансии

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн