В чем разница между sealed class и abstract class

«В чем разница между sealed class и abstract class» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Sealed классы ограничивают наследование строго определенным набором подклассов, объявленных в одном файле (или в одном пакете, начиная с Kotlin 1.5). Abstract классы позволяют наследование любым классам.

Ключевые отличия:

  1. Наследование: sealed классы имеют фиксированное количество наследников, abstract — нет.
  2. Модификаторы: sealed классы всегда abstract и не могут быть open или final.
  3. 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 -> { /*...*/ }
}