Pascal4eg / Java

 Java | Фишки и трюки

Запечатанные классы (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.