Вопрос с собеседования · Java

Что обязан сделать наследник sealed-класса?

MiddleСовременная JavaJava >=17
Коротко

Наследник sealed-класса обязан: быть в permits (или в том же файле, если permits опущен), объявить себя final, sealed или non-sealed, лежать в том же модуле (вне модулей — в том же пакете).

  • final — ветка закрыта, sealed — продолжает запечатывание, non-sealed — открывает ветку всем
  • Record и enum неявно final — подходят сразу
  • Без явного модификатора гарантия полноты рассыпалась бы уровнем ниже

А ещё non-sealed — сознательная точка расширения

Подробно

Требование объявить один из трёх модификаторов существует затем, чтобы закрытость не протекала: наследник обязан явно сказать, продолжает ли он запечатывание (sealed), закрывает ветку (final) или снова открывает её всем (non-sealed). Без этого гарантия полноты набора рассыпалась бы на следующем уровне иерархии. Ограничение на расположение обеспечивает проверяемость: компилятор должен видеть весь набор. Record тут удобен и часто используется вместе с sealed для алгебраических типов данных, но обязательным не является — наследником может быть обычный класс.

Что хотят услышать

  • Три требования.
  • Смысл трёх модификаторов.

Частые ошибки

  • Забыть модификатор у наследника — код не скомпилируется.
  • Считать, что наследники обязаны быть record.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Быть перечисленным в permits (или лежать в том же файле)
  • ✓Объявить себя как final, sealed или non-sealed
  • ✓Находиться в том же модуле или, вне модулей, в том же пакете
  • ✗Быть объявленным как record или final-класс, чтобы иерархия оставалась закрытой

Что спросят дальше

  • Что означает non-sealed и когда он нужен?
  • Можно ли опустить permits и что тогда произойдёт?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования