美文网首页kotlin
kotlin sealed密封类

kotlin sealed密封类

作者: Bfmall | 来源:发表于2022-04-22 11:47 被阅读0次

    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系")
        }
    }
    

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

    相关文章

      网友评论

        本文标题:kotlin sealed密封类

        本文链接:https://www.haomeiwen.com/subject/uhviertx.html