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