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

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

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

3 ответа

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

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

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

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

sealed class Animal {
    class Cow(val name: String) : Animal()
}

//It generates a compilation error
class Horse : Animal() {
}

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

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

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

Другие вопросы по тегам