Pull to refresh

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

Java
Статья представляет авторское понимание главы из книги 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). Все конструкторы должны вызывать конструктор суперкласса явно или неявно, а подклассы данного класса не будут иметь доступа к конструктору базового класса.
Tags:javaeffective javaabstractfinal
Hubs: Java
Total votes 18: ↑12 and ↓6+6
Views21K
Comments Comments 24

Popular right now