Что представляет собой закрытый модификатор в Котлине?
Я немного запутался в использовании 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
,
Вы можете прочитать больше об этом в официальных документах для закрытых классов.