Что обязан сделать наследник sealed-класса?
Наследник 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 и что тогда произойдёт?
Разбор темы
- Sealed-типы и pattern matching
Закрытые иерархии через sealed, pattern matching в instanceof и switch, деконструкция записей и проверка исчерпываемости.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.