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

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). Все конструкторы должны вызывать конструктор суперкласса явно или неявно, а подклассы данного класса не будут иметь доступа к конструктору базового класса.
Теги:
Хабы:
Всего голосов 18: ↑12 и ↓6+6
Комментарии24

Публикации

Истории

Работа

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

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

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн