密封类

    要声明一个密封类,需要在类名前面添加 修饰符。虽然密封类也可以有子类,但是所有子类都必须在与密封类自身相同的文件中声明。(在 Kotlin 1.1 之前, 该规则更加严格:子类必须嵌套在密封类声明的内部)。

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

    请注意,扩展密封类子类的类(间接继承者)可以放在任何位置,而无需在同一个文件中。

    1. fun eval(expr: Expr): Double = when(expr) {
    2. // 不再需要 `else` 子句,因为我们已经覆盖了所有的情况