Запечатанные классы (Sealed class)
public sealed class Color permits Red, Green, Blue {
}
public sealed class Red extends Color permits Ruby, Raspberry, Cherry {
}
public non-sealed class Green extends Color {
}
public final class Blue extends Color {
}
Sealed class дословно переводится как «запечатанный класс». В этом классе нужно сразу объявить список классов-наследников, потому что кроме них наследников быть не может.
Классы наследники должны быть в том же пакете или модуле, что и класс предок с модификатором sealed. Кроме этого, у них обязательно должен быть один из модификаторов:
- final, если класс запрещён к дальнейшему наследованию
- sealed, если наследование допустимо, но с заранее указанным списком наследников
- non-sealed, когда для класса нужно снять любые ограничения по наследованию
У интерфейсов тоже может быть модификатор sealed.