Проверяет понимание различий между sealed class и enum class и особенностей их конструкторов.
enum class задаёт фиксированный набор однотипных констант без полей состояния, тогда как sealed class позволяет иметь произвольные подклассы с параметризованными конструкторами и собственной логикой. У enum конструктор ограничен перечислением констант, а у sealed каждый подкласс может иметь свой конструктор и свойства.
1. enum class:
Фиксированный список объектов-констант
Однородные элементы без разной логики
Конструктор общий для всех перечислений:
enum class Direction(val dx: Int, val dy: Int) {
NORTH(0,-1), EAST(1,0), SOUTH(0,1), WEST(-1,0)
}2. sealed class:
Поддерживает различные подклассы со своими конструкторами
Каждый подкласс может быть data class или object
Конструкторы определяются в каждом подклассе:
sealed class Shape {
data class Circle(val r: Double): Shape()
data class Rect(val w: Double, val h: Double): Shape()
object Point: Shape()
}3. Ключевые отличия:
enum: однородность, ограниченный набор, лучше для простых вариантов без состояния
sealed: разнородность, расширяемость подтипами, разный набор данных
4. Когда использовать:
enum для простых статусов или флагов
sealed для сложных иерархий с разным состоянием и поведением