密封修饰符在Kotlin中代表什么?

我对使用sealed修饰符有点困惑。

它有什么作用?

官方文档涵盖了这一点。

密封类具有受限继承层次结构:只有在它们内部声明的类或与它们在同一个文件中的类(因为Kotlin 1.1)可以是密封类的子类。

与表达式结合when ,这可以是有用的,这可以保证他们的分支彻底检查一个密封类的可能的子类。

这个修饰符主要用于限制创建子类的可能性,这意味着所有的直接子类都应该嵌套,这是一个例子:

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

所以, sealed类不能在类之外有继承者。

其他的答案是好的,但我认为值得一提的是一个重要的观点:扩展一个密封类的子类的类可以放在任何地方,不一定在同一个文件中。 这一点很重要,因为密封类不一定意味着整个继承层次将在同一个文件中,除非每个子类都被sealed

您可以在官方的密封课程文档中阅读更多信息。