kotlin 中有一个关键字 sealed, 可以用于声明密封类或接口,密封类/接口的所有继承者 都需要在编译时明确。因此如果你开发的代码库中声明了密封类,第三方使用者是不能继承 该类的,同样不能实现密封接口

sealed interface Error
 
sealed class IOError(): Error
 
class FileReadError(val f: File): IOError()
class DatabaseError(val source: DataSource): IOError()
 
object RuntimeError : Error

一个密封类是自身抽象的,它不能直接实例化并可以有抽象(abstract)成员

密封类的构造器只能是两种类型:protected (by default) or private

使用密封类的其中一个关键好处在于使用 when 表达式的时候,如果能够验证语句覆盖了所 有情况,就不需要为该语句再添加一个 else 子句了