Ответ
Sealed class можно объявлять на верхнем уровне (вне других классов) или внутри другого класса, но не внутри функций. Вложенные sealed-классы должны быть объявлены как inner.
Пример:
// Верхний уровень
sealed class Result<out T>
// Внутри класса
class ApiClient {
sealed class Response
}
// Ошибка - нельзя внутри функции
fun foo() {
sealed class LocalResult // Compiler error
}
Ключевые ограничения:
- Все подклассы должны быть объявлены в том же файле (для top-level) или в том же классе (для вложенных)
- Конструктор всегда
protected(по умолчанию) илиprivate