首页 > 解决方案 > Kotlin 继承问题 - 固有的类类型转换

问题描述

假设我有课:

open class Organism {
    open fun saySomething(){
        print("Nein")
    }
}

和继承类:

class Person : Organism() {
    override fun saySomething() {
        println("Saying hello")
    }
}

为什么当我运行这段代码时,我仍然得到 person 实现:

 val x = Person()
 (x as Organism).saySomething()  // Output: Saying hello

这种铸造不应该运行有机体类实现?

谢谢。

标签: kotlin

解决方案


不,不应该。这是因为您自己告诉编译器您正在覆盖 Organism类方法,并且编译器应该在超级(父类方法)实现上使用这个被覆盖的方法。如果你想调用父类的超级行为,那么在子类的重写方法中,根据你的使用包括super.saySomething()之前或之后。println()此外,如果您编写val x: Organism = Person(),这将编译,因为 Personis-a与 Parent 类建立关系并且编译器知道在这种情况下要调用什么。换句话说,这称为多态性


推荐阅读