Kotlin继承与多态 (3)密封类

  如果一个类的子类个数是有限的,那么 kotlin 中可以把这种父类定义为密封类,密封类是一种抽象类,它限定了子类个数。

  • 密封类的声明,需要私用关键字 sealed 修饰。密封类本身就是抽象类不需要使用 abstract 修饰,一定也是 open 的,密封类不能实例化。
sealed class Person(val name: String, val age: Int)

class Student(name: String, age: Int, private val school: String) : Person(name, age)

class Worker(name: String, age: Int, factory: String) : Person(name, age)

fun main(args: Array) {
    val p1 = Student("小三", 18, "清华大学")
    val p2 = Student("小四", 18, "北京大学")

    val p3 = Worker("工人1", 20, "钢厂")
    val p4 = Worker("工人2", 20, "矿厂")
}

提示:密封类和枚举类的区别:密封类子类与枚举类常量成员是对应的,密封类子类可以有不同的内部结构,子类可以有多个构造函数,可以创建多个不同的实例。而枚举类常量成员的构造函数是固定的,由枚举类定义好的,每一个枚举类常量只能创建一个实例

你可能感兴趣的:(Kotlin继承与多态 (3)密封类)