Sobes.tech
Назад к вопросам
Junior — Middle
86

Какие отличия существуют между Sealed Interface и Sealed Class в Kotlin?

Компании, где спрашивали
Effective Technologies
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Kotlin sealed class и sealed interface используются для ограничения иерархии наследования, позволяя объявить фиксированный набор подклассов или реализаций, известных на этапе компиляции.

Основные отличия:

  • Sealed Class — это класс, который может иметь ограниченное число подклассов. Все подклассы должны быть объявлены в том же файле, что и sealed класс (или в его пределах). Это удобно для реализации иерархий с ограниченным числом вариантов, например, для выражения состояний или событий.

  • Sealed Interface — аналогично sealed классу, но для интерфейсов. Позволяет объявить интерфейс с ограниченным числом реализаций. Это полезно, когда нужно описать поведение, которое могут реализовывать разные классы, но при этом ограничить их набор.

Пример:

sealed class Result {
    data class Success(val data: String) : Result()
    object Error : Result()
}

sealed interface Shape
class Circle(val radius: Double) : Shape
class Rectangle(val width: Double, val height: Double) : Shape

Таким образом, sealed class подходит, когда нужна базовая реализация с состояниями, а sealed interface — когда важна контрактная часть с ограниченным числом реализаций. Оба помогают компилятору проверять полноту when выражений и обеспечивают безопасность типов.