Ответ
Sealed классы ограничивают наследование строго определенным набором подклассов, объявленных в одном файле (или в одном пакете, начиная с Kotlin 1.5). Abstract классы позволяют наследование любым классам.
Ключевые отличия:
- Наследование: sealed классы имеют фиксированное количество наследников, abstract — нет.
- Модификаторы: sealed классы всегда
abstractи не могут бытьopenилиfinal. - When-выражения: для sealed классов компилятор проверяет exhaustiveness (полноту проверки всех вариантов).
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
}
// Компилятор требует обработки всех случаев
when (result) {
is Result.Success -> { /*...*/ }
is Result.Error -> { /*...*/ }
}