Kotlin学习笔记3-7 类和对象-密封类

密封类

Kotlin官网:Classes and Objects-Sealed Classes
密封类和枚举类相似,也是用来限制类型的范围。
和枚举类不同的是,枚举类是单例的,密封类可以创建多个实例。
要声明为密封类,使用sealed关键字修饰类名。
密封类可以被继承,所有的继承子类必须和密封类声明在一个文件中。

sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()

上例中用到了Kotlin1.1的新特性:数据类可以继承其他类,包括密封类。
密封类默认是抽象的,不可以被实例化,可以有抽象的成员。
密封类的所有构造函数都必须是private的,默认既是private。
继承密封类子类的类(间接继承)不受“必须同文件”限制,随意声明在任何地方都可以。
密封类的最大优势是在when表达式中使用。

fun eval(expr: Expr): Double = when(expr) {
    is Const -> expr.number
    is Sum -> eval(expr.e1) + eval(expr.e2)
    NotANumber -> Double.NaN
    // the `else` clause is not required because we've covered all the cases
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值