Может ли selaed class наследоваться от другого sealed class в Kotlin

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

Ответ

Да, sealed класс может наследоваться от другого sealed класса в Kotlin. Это позволяет создавать иерархии sealed классов. Однако все подклассы должны быть объявлены в том же файле или внутри тела родительского sealed класса.

Пример:

sealed class Vehicle
sealed class Car : Vehicle() {
    class Sedan : Car()
    class SUV : Car()
}

fun processVehicle(vehicle: Vehicle) {
    when (vehicle) {
        is Car.Sedan -> println("Sedan")
        is Car.SUV -> println("SUV")
    }
}

Ограничения:

  1. Все наследники должны быть в том же файле или внутри sealed класса
  2. Наследники могут быть как обычными, так и sealed классами
  3. Наследование работает только в пределах одного модуля