Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем