我有一个非常简单的问题,但无法弄清楚。 考虑一个 Java 类:
class A {
public static final int AA=5;
}
(内部)翻译成 kotlin 如下:
open class A {
companion object {
val AA:Int=5
}
}
至少我是这么认为的。 现在如果你在java中继承:
class B extends A {
int AAA;
}
您可以通过 B 访问字段 AA(从 A),如下所示: B.AA 。然而,在 Kotlin 中这是不可能的。访问它的唯一方法是通过 A.AA。 这是内置功能还是我做错了什么?
最佳答案
在Java中,当编译器看到B.AA
时,它会自动将其转换为A.AA
。那里没有真正的继承或重写。
Kotlin 的开发人员决定不模拟此功能,因为它不符合将静态方法视为属于对象
的想法:B
的伴生对象不符合这种情况。不能扩展 A
的伴生对象,因为您无法扩展对象
。
请注意,类似地,在 Java 中,您可以通过 a.AA
访问该字段,其中 a
是 A
的实例;在 Kotlin 中你也无法做到这一点。
关于java - kotlin 中的静态最终字段继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684071/