Ответ
Да, можно, но с ограничениями. Sealed Class (введён в Java 17) позволяет чётко контролировать, какие классы могут его наследовать.
sealed class Shape permits Circle, Square {
// базовый класс
}
final class Circle extends Shape { /*...*/ }
final class Square extends Shape { /*...*/ }
Ключевые моменты:
- Подклассы должны быть явно перечислены через
permits - Подклассы должны быть либо
final,sealed, либоnon-sealed - Все наследники должны находиться в том же модуле/пакете (если
permitsне указан)
Пример с non-sealed:
non-sealed class Rectangle extends Shape { /*...*/ }
Это позволяет создавать открытые ветки наследования.