kotlin - 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
这种铸造不应该运行有机体类实现?
谢谢。
解决方案
不,不应该。这是因为您自己告诉编译器您正在覆盖 Organism
类方法,并且编译器应该在超级(父类方法)实现上使用这个被覆盖的方法。如果你想调用父类的超级行为,那么在子类的重写方法中,根据你的使用包括super.saySomething()
之前或之后。println()
此外,如果您编写val x: Organism = Person()
,这将编译,因为 Personis-a
与 Parent 类建立关系并且编译器知道在这种情况下要调用什么。换句话说,这称为多态性。
推荐阅读
- javascript - 如何在打开另一个页面时最小化网站中的侧边栏?
- css - 在 FullCalendar 中打印每日空格
- typescript - 如何让打字稿了解动态添加到类中的静态成员的存在?
- php - 如何显示位于多维数组第二级的 json 值?
- c++ - 如何使用 stringstreams 查找字符串中的整数之和?
- java - 是否有必要在 ThreadFactory 中使用 AtomicInteger?
- python - 矩阵运算后得到输出
- java - Java扫描仪从我的文本文件中读取null?
- hibernate - 找不到任何 META-INF / 没有持久性提供程序
- r - 计算组中在另一列中具有特定值的行的百分比