
Sealed Class
| https://kotlinlang.org/docs/sealed-classes.html | 
sealed class
Ограничивает наследование, разрешая создание подклассов только в пределах того же файла или модуля. Это даёт полный контроль над возможными подтипами и упрощает поддержку безопасного и предсказуемого кода.
• Все наследники известны на этапе компиляции. Наследование от sealed классов в разных модулях запрещено — IDE покажет ошибку.
• sealed класс нельзя создать напрямую — он только предок.
• Нельзя присвоить анонимному классу, так как это определяется на этапе выполнения.
• Классы не могут быть open или inner.
• Модификатор abstract избыточен, так как класс sealed может быть абстрактным.
• Можно использовать sealed interface, если не нужно передавать параметры в конструктор.
• В Java это реализовано как abstract class.
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val exception: Exception) : Result()
    object Loading : Result()
}sealed interface
Ограничивает реализации интерфейса, позволяя создавать закрытые иерархии типов.
sealed interface Shape
data class Circle(val radius: Double): Shape
data class Rectangle(val width: Double, val height: Double): Shape
fun area(shape: Shape): Double = when (shape) {
    is Circle -> Math.PI * shape.radius * shape.radius
    is Rectangle -> shape.width * shape.height
}Вопросы на собесе (11)
- Что такое sealed class?
Это класс с ограниченным набором подклассов. Он позволяет выражать иерархии, где возможные варианты известны на этапе компиляции. Используется для безопасного управления состоянием, например, при обработке событий в
when. 
- Что такое sealed interface?
Интерфейс с ограниченным набором реализаций, подобный
sealed class. Все реализацииsealed interfaceдолжны находиться в том же файле, что и сам интерфейс, что обеспечивает контроль над наследованием и позволяет использоватьwhenбез ветки else для исчерпывающей проверки всех вариантов. 
- Какие преимущества у использования sealed class?
• Гарантированное исчерпывающее перечисление всех возможных подклассов, что позволяет более безопасно работать с
whenвыражениями.• Улучшенная читаемость и контроль над иерархией классов.
• Ограничение наследования, что делает код более предсказуемым и поддерживаемым.
 
- Какие ограничения наследования есть у sealed class?
Нельзя создавать подклассы вне того файла, где он объявлен.
 
- Разница между sealed class и enum class?
sealed classпозволяет создавать иерархии с ограниченным набором подклассов и поддерживает наследование, тогда какenum classпредставляет фиксированный набор констант и не поддерживает наследование. Компилятор знает все значенияenum classна этапе compile time.sealed class- набор значений,enum class- набор состояний. Пример примененияsealed class- тип фигуры: квадрат (стороны), треугольник (углы) и круг (диаметр). 
- Разница между sealed class и enum class с точки зрения хранения в памяти?
enum-классы хранятся в памяти как одиночные экземпляры каждого значения, создаваемые при запуске, поскольку каждыйenum— этоstatic finalобъект. Это экономит память, так как каждый экземпляр создаётся только один раз.sealed-классы создают отдельные экземпляры для каждого наследника при каждом использовании, аналогично обычным классам. Поэтому их использование может потребовать больше памяти, особенно если наследники содержат свойства или создаются динамически. 
- Разница между sealed class и abstract class?
sealed classограничивает наследование только подклассами, определёнными в том же файле, и используется для моделирования замкнутых иерархий типов.abstract classпозволяет наследоваться без ограничений и предоставляет общие абстрактные методы для реализации в подклассах. 
- Разница между sealed class и sealed interface?
sealed classможет иметь поля, которые доступны в его подклассах.sealed interfaceне может содержать поля, только методы.sealed interfaceможет быть более гибким в некоторых случаях, позволяя интерфейсам определять ограничения, которые могут быть реализованы различными классами, тогда как sealed class имеет более строгую иерархию. 
- Разница между sealed interface и interface?
sealed interfaceограничивает набор классов, которые могут реализовать этот интерфейс, обеспечивая контроль над всеми реализациями на этапе компиляции. Это позволяет, например, более строго управлять обработкой различных реализаций. В то время как обычный interface не ограничивает количество классов, которые могут его реализовать, что может привести к неожиданным или неуправляемым реализациям. 
- Как sealed class выглядит под капотом в Java?
Как
abstract class. 
- Какие классы могут наследоваться от sealed class?
•
class•
data class•
object•
data object•
inner class•
sealed class