Kotlin继承问题-固有类类型转换

时间:2019-09-08 21:36:44

标签: kotlin

假设我上课:

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

继承类:

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

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

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

此强制转换不应该运行Organism类的实现?

谢谢。

1 个答案:

答案 0 :(得分:2)

不,不应该。这是因为您自己告诉编译器您正在覆盖 Organism类方法,并且编译器应在super(Parent class method)实现上使用此覆盖的方法。如果要调用父级的 super 行为,则在子类的重写方法中,根据用途,在super.saySomething()之前或之后添加println()。另外,如果您编写val x: Organism = Person(),这将编译,因为Person与Parent类建立了is-a关系,并且编译器知道在这种情况下要调用的内容。换句话说,称为Polymorphism