Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvOpEsSC 97 of 147 menu
◀ ▶

Объявление sealed class в Java

Класс с модификатором sealed задаёт родительский тип с заранее известным полным набором подтипов. Наследование оформляют как у обычного класса, но все потомки должны быть final, sealed или non-sealed; снаружи разрешённого списка новый наследник добавить нельзя:

sealed class Post permits DraftPost, PublishedPost { } final class DraftPost extends Post { private final String title; DraftPost(String title) { this.title = title; } String title() { return title; } } final class PublishedPost extends Post { private final String title; PublishedPost(String title) { this.title = title; } String title() { return title; } }

Создадим DraftPost и проверим оператор instanceof:

Post post = new DraftPost("Notes"); System.out.println(post instanceof DraftPost);

Вариант без полей оформляют финальным классом без дополнительных данных. Так отмечают единственное состояние вроде архива или пустого результата:

final class ArchivedPost extends Post { }

Создадим ArchivedPost и выведем короткое имя его класса:

Post post = new ArchivedPost(); System.out.println(post.getClass().getSimpleName());

Переменная запечатанного типа может хранить любой из объявленных подтипов. Проверка типа через instanceof и разбор по вариантам удобно делаются в switch - компилятор видит весь список наследников:

public class Main { static String kind(Post post) { if (post instanceof DraftPost) { return "draft"; } return "published"; } public static void main(String[] args) { System.out.println(kind(new PublishedPost("News"))); } }

Объявите sealed class Employee с вариантами Intern и Staff как final классы без полей. Сохраните new Staff() в переменную Employee и выведите true, если это Staff.

Объявите sealed class Employee: NamedEmployee с полем name, GuestEmployee без полей. Создайте new NamedEmployee("Ann"), сохраните в employee и выведите имя.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить