kotlin

kotlin sealed密封类

2022-04-22  本文已影响0人  Bfmall

kotlin中sealed关键字修饰的类就是密封类。密封类其实是一种特殊的抽象类,专门用于派生子类的。

密封类的特点
密封类的子类是固定的
密封类的直接子类必须和密封类在同一个文件中
密封类间接的子类可以在不同文件中
密封类所有的构造方法都是private的
如下程序定义了一个密封类和3个子类:

// 声明一个密封类:在类定义前用关键字 sealed 来修饰。
sealed class DreamCar {

    //驾驶感受
    abstract fun drive();

    //档次
    fun grade() {
        println("档次如何呢?")
    }

    open class BenZCar : DreamCar() {
        override fun drive() {
            println("奔驰豪华牛逼")
        }
    }

    open class BMWCar : DreamCar() {
        override fun drive() {
            println("宝马操控牛逼")
        }
    }

    open class AudiCar : DreamCar() {
        override fun drive() {
            println("奥迪四驱牛逼")
        }
    }

    fun testDreamCar(dreamCar: DreamCar) {
        when(dreamCar) {
            is BenZCar -> dreamCar.drive()
            is BMWCar -> dreamCar.drive()
            is AudiCar -> dreamCar.drive()
            else -> null
        }
    }
}

密封类间接的子类可以在不同文件中,如下:

class BMWSeries3Car : DreamCar.BMWCar() {
    override fun drive() {
        super.drive()
        println("年轻人绕不开一辆宝马3系")
    }
}

密封类就像在写嵌套类,也像是在写枚举类。密封类是枚举类的扩展,每个枚举常量只有一个实例,而密封类的一个子类有可包含状态的多个实例。也就是说,对密封类的子类进行多次实例化产生多个不同的实例,而这个在枚举类中是无法实现的。

上一篇下一篇

猜你喜欢

热点阅读