В каких случаях и в каком месте можно объявить подклассы, если класс помечен как sealed?

В Kotlin класс, помеченный как sealed, ограничивает иерархию наследования: все подклассы такого класса должны быть объявлены в том же файле, что и сам sealed класс.

Короткий ответ

Что ответить на собеседовании

В Kotlin класс, помеченный как sealed, ограничивает иерархию наследования: все подклассы такого класса должны быть объявлены в том же файле, что и сам sealed класс. Это позволяет компилятору знать полный набор наследников и использовать это, например, в выражениях when без необходимости писать ветку else.

Подробный разбор

Ответ с пояснениями

В Kotlin класс, помеченный как sealed, ограничивает иерархию наследования: все подклассы такого класса должны быть объявлены в том же файле, что и сам sealed класс. Это позволяет компилятору знать полный набор наследников и использовать это, например, в выражениях when без необходимости писать ветку else.

То есть подклассы sealed класса можно объявлять:

  • В том же файле, где объявлен sealed класс.
  • Внутри самого sealed класса (вложенные классы).

Пример:

sealed class Result {
    class Success(val data: String) : Result()
    class Error(val error: Throwable) : Result()
}

Или

sealed class Result

class Success(val data: String) : Result()
class Error(val error: Throwable) : Result()

Но все эти подклассы должны находиться в одном файле с sealed классом. Это ограничение помогает обеспечивать безопасность типов и полноту проверок.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку