sealed class是什么意思
时间: 2024-06-14 19:05:19 浏览: 181
sealed class是一种在编程语言中用于限制类的继承关系的特性。它允许开发者明确指定哪些类可以继承自该密封类,从而使类的继承树结构更加清晰。
在Kotlin中,使用关键字sealed来声明一个密封类。密封类可以有多个子类,但这些子类必须嵌套在密封类内部或者与密封类在同一个文件中。密封类的子类可以是密封类本身的直接子类,也可以是间接子类。
密封类的主要作用是限制继承关系,只允许特定的类继承自密封类。这些特定的类需要使用关键字permits来声明,并列在密封类的后面。被permits关键字指定的类可以是非密封类,表示该类的子类不需要进行密封,可以任意进行继承。
下面是一个示例代码,演示了如何使用密封类和permits关键字:
```kotlin
sealed class SealedClass {
class SealedClass1 : SealedClass()
class SealedClass2 : SealedClass()
// 其他子类...
}
class NonSealedClass : SealedClass()
fun main() {
val obj1: SealedClass = SealedClass.SealedClass1()
val obj2: SealedClass = SealedClass.SealedClass2()
val obj3: SealedClass = NonSealedClass() // 非密封类的子类也可以赋值给密封类的变量
when (obj3) {
is SealedClass.SealedClass1 -> println("Object is SealedClass1")
is SealedClass.SealedClass2 -> println("Object is SealedClass2")
else -> println("Object is not a sealed class")
}
}
```
在上面的示例中,SealedClass是一个密封类,它有两个子类SealedClass1和SealedClass2。NonSealedClass是一个非密封类,它也可以作为密封类的子类。在main函数中,我们创建了不同的对象,并使用when表达式来判断对象的类型。
阅读全文