Что представляет собой запечатанный модификатор в Котлин?

Я немного запутался в использовании sealed модификатора.

Что оно делает?

Официальные документы охватывают это.

Запечатанные классы имеют ограниченные иерархии наследования: только классы, объявленные внутри них или находятся в том же файле, что и они (начиная с Kotlin 1.1), могут быть подклассами закрытого класса.

Это может быть полезно в сочетании с выражениями, которые могут гарантировать, что их ветви исчерпывающе проверяют возможные подклассы закрытого класса.

Этот модификатор в основном используется, если вы хотите ограничить возможность создания подкласса, это означает, что все прямые подклассы должны быть вложенными, это пример:

 sealed class Animal { class Cow(val name: String) : Animal() } //It generates a compilation error class Horse : Animal() { } 

Таким образом, sealed классы не могут иметь наследников вне класса.

Другие ответы хороши, но важным моментом я считаю, что стоит добавить: классы, которые расширяют подклассы закрытого класса, могут быть размещены где угодно, а не обязательно в одном файле. Важно отметить, так как запечатанный класс не обязательно означает, что целая иерархия наследования будет в том же файле, если только каждый подкласс не будет sealed .

Подробнее об этом можно узнать в официальных документах для закрытых классов.