В чем разница между Sealed Interface и Sealed Class

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

Ответ

Sealed Interface и Sealed Class ограничивают иерархию, но с ключевыми отличиями:

  1. Sealed Class:

    • Может содержать состояние (поля, свойства).
    • Поддерживает конструкторы (open/abstract/final).
    • Пример:
      sealed class Result {
          data class Success(val data: String) : Result()
          data class Error(val message: String) : Result()
      }
  2. Sealed Interface:

    • Не может хранить состояние (только объявления функций).
    • Позволяет множественное наследование (класс может реализовать несколько sealed интерфейсов).
    • Пример:
      sealed interface ApiResult
      class Success : ApiResult
      class Error : ApiResult

Когда использовать: Sealed Class для иерархии с общим состоянием, Sealed Interface для контрактов без состояния или множественного наследования.