33. 密封类

作者: 厚土火焱 | 来源:发表于2017-11-25 17:24 被阅读86次

密封类是 kotlin 中比较特殊的类,用来表示受限的类继承结构。它的值为有限集内的类型,不能有任何其他类型。
密封类在某种意义上是枚举的类的扩展。枚举类的枚举常量只有一个实例,密封类的一个子类可以有可包含状态的多个实例。
密封类使用 sealed 修饰类,密封类可以有子类,子类可以写在密封类内部,也可以写在密封类同一个文件的同级位置。
密封类不允许外部扩展,可以有效的保护本类不被篡改。

sealed class ClientCMD{
    /**浏览网页*/
    class ViewPages(val url:String, val logined:Boolean):ClientCMD()
    /**浏览过的网页*/
    data class ViewedPages(val id:Int, val url: String):ClientCMD()
    object website:ClientCMD()
    fun eval(clientCMD: ClientCMD):Any = when(clientCMD){
        is ViewedPages -> clientCMD.url
        is ViewPages -> if (clientCMD.logined) {"true"} else {"false"}
        is website -> clientCMD.toString()
    }
}
fun main(args: Array<String>) {
    val ss = ClientCMD.ViewedPages(0,"cofox.com")
    val ss1 = ClientCMD.ViewPages("cofox2.com",false)
    println(ss.url)
    println(ss1.url)
    println(ss.eval(ss))
    println(ss.eval(ss1))
    println(ss1.eval(ss))
    println(ss1.eval(ss1))
}

运行结果示例

cofox.com
cofox2.com
cofox.com
false
cofox.com
false

相关文章

  • 33. 密封类

    密封类是 kotlin 中比较特殊的类,用来表示受限的类继承结构。它的值为有限集内的类型,不能有任何其他类型。密封...

  • 12.Kotlin泛型与协变及逆变原理剖析

    1.密封类 密封类(sealed class)①密封类用来表示受限的类继承结构,对密封类中的某个值来说,它所属类型...

  • 密封类

    密封类:断子绝孙 如果我们的类是密封类,那么就意味着不能有任何派生类。 但是密封类是可以拥有父类 C#中密封类使用...

  • 密封类,密封方法

    密封:sealed 对于类,不能被继承(任何类都不能继承) 对于方法不能被重写。 “sealed”,只能写在重写的...

  • 密封类

    using System; namespace _密封类 { class MainClass { public s...

  • 密封类

    密封类的关键词为sealed 他是一种特殊的抽象类,无法被实例化。 它的构造函数是private的,这将使其只能在...

  • Kotlin 密封类 Sealed的总结

    概念sealed修饰的类 在kotlin中是密封类 密封类 描述的是 父类和子类的关系1、密封类和它的子类必须定义...

  • Android MVI 设计模式(3)

    我们用 kotlin 的 sealed 类密封一些数据类,kotlin 提供的密封类类似于枚举,密封类用于定义一种...

  • Kotlin学习之密封类

    Kotlin学习之密封类 密封类是Kotlin中的一个高级类,有如下特点: 密封类是为继承设计的,是一个抽象类; ...

  • kotlin sealed密封类

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

网友评论

    本文标题:33. 密封类

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