我有以下 Kotlin 代码。一个称为密封类Animal
,以及两个对象类Dog
并Cat
继承自密封类Animal
。我when
在 is Cat 案例的子句中收到此错误。
Incompatible types: Cat and Dog
为什么会出现此错误?如何在 Kotlin 中使用密封类来进行这种类型的操作?密封类是做多态性的好选择吗?
sealed class Animal {
abstract fun speak()
}
object Dog : Animal() {
override fun speak() { println("woof") }
}
object Cat : Animal() {
override fun speak() { println("meow") }
}
fun main(args: Array<String>) {
var i = Dog
i.speak()
when(i) {
is Dog -> {
print("Dog: ")
i.speak()
}
is Cat -> {
print("Cat: ")
i.speak()
}
}
}