密封类
要声明一个密封类,需要在类名前面添加 修饰符。虽然密封类也可以有子类,但是所有子类都必须在与密封类自身相同的文件中声明。(在 Kotlin 1.1 之前,该规则更加严格:子类必须嵌套在密封类声明的内部)。
一个密封类是自身抽象的,它不能直接实例化并可以有抽象(abstract
)成员。
请注意,扩展密封类子类的类(间接继承者)可以放在任何位置,而无需在同一个文件中。
fun eval(expr: Expr): Double = when(expr) {
is Sum -> eval(expr.e1) + eval(expr.e2)
// 不再需要 `else` 子句,因为我们已经覆盖了所有的情况