Назад к вопросам
Совкомбанк
amoCRM
Junior — Middle
69
Какое отличие между sealed классами и enum классами в Kotlin и в чем их основные различия?
Компании, где спрашивали
Viasat tech
Ответ от нейросети
sobes.tech AI
Sealed классы и enum классы в Kotlin служат для ограничения иерархий классов, но имеют разные цели и особенности:
-
Sealed классы позволяют ограничить набор подклассов, которые могут наследоваться от базового класса. Все подклассы должны быть объявлены в том же файле, что и sealed класс. Это удобно для создания ограниченных иерархий с разными типами данных.
-
Enum классы предназначены для определения фиксированного набора констант (перечислений). Каждый элемент enum — это объект этого класса.
Основные различия:
| Характеристика | Sealed класс | Enum класс |
|---|---|---|
| Назначение | Ограничение наследования | Определение фиксированного набора констант |
| Подклассы | Могут быть разными классами | Только константы enum |
| Расположение подклассов | В том же файле | Все элементы перечислены внутри enum |
| Возможность иметь состояние и поведение | Да, подклассы могут иметь разные свойства и методы | Да, но все элементы — экземпляры одного класса |
Пример sealed класса:
sealed class Result
class Success(val data: String) : Result()
class Error(val error: Throwable) : Result()
Пример enum:
enum class Direction {
NORTH, SOUTH, EAST, WEST
}