Я немного запутался в использовании sealed
модификатора.
Что оно делает?
Официальные документы охватывают это.
Запечатанные классы имеют ограниченные иерархии наследования: только классы, объявленные внутри них или находятся в том же файле, что и они (начиная с Kotlin 1.1), могут быть подклассами закрытого класса.
Это может быть полезно в сочетании с выражениями, которые могут гарантировать, что их ветви исчерпывающе проверяют возможные подклассы закрытого класса.
Этот модификатор в основном используется, если вы хотите ограничить возможность создания подкласса, это означает, что все прямые подклассы должны быть вложенными, это пример:
sealed class Animal { class Cow(val name: String) : Animal() } //It generates a compilation error class Horse : Animal() { }
Таким образом, sealed
классы не могут иметь наследников вне класса.
Другие ответы хороши, но важным моментом я считаю, что стоит добавить: классы, которые расширяют подклассы закрытого класса, могут быть размещены где угодно, а не обязательно в одном файле. Важно отметить, так как запечатанный класс не обязательно означает, что целая иерархия наследования будет в том же файле, если только каждый подкласс не будет sealed
.
Подробнее об этом можно узнать в официальных документах для закрытых классов.