Ответ
Sealed-классы (запечатанные классы) — это механизм, представленный в Java 15 (предпросмотр) и окончательно в Java 17, который позволяет строго контролировать иерархию наследования.
Для чего нужны:
- Ограничение наследования. Автор класса или интерфейса определяет фиксированный набор классов, которые могут его расширять/реализовывать.
- Моделирование точных доменных моделей. Полезно для представления известных, ограниченных вариантов (например, фигуры:
Circle,Square,Triangle). - Улучшение читаемости и безопасность кода. Компилятор знает все возможные подтипы, что позволяет использовать исчерпывающие проверки в
switch-выражениях (Java 17+) без блокаdefault.
Синтаксис:
// Объявление запечатанного интерфейса с разрешенными реализациями
public sealed interface Shape permits Circle, Rectangle, Triangle {}
// Классы-наследники должны быть final, sealed или non-sealed
public final class Circle implements Shape { /*...*/ }
public non-sealed class Rectangle implements Shape { /*...*/ }
public sealed class Triangle permits EquilateralTriangle, RightTriangle {}
Ключевые модификаторы наследников:
final— дальнейшее наследование запрещено.sealed— наследование разрешено, но тоже для ограниченного круга классов.non-sealed— класс открыт для неограниченного наследования ("снимает печать").