我在这里有一个非常简单的问题,但无法弄清楚。 考虑一个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访问字段A(从A)到B.AA。但是,在科特林这是不可能的。唯一的访问方法是通过A.AA。 这是内置功能还是我做错了什么?
答案 0 :(得分:2)
在Java中,当编译器看到B.AA
时,它将自动将其转换为A.AA
。没有真正的继承或覆盖。
Kotlin的开发人员决定不仿制此功能,因为它不适合将静态方法视为属于object
的想法:B
的伴随对象未扩展A
,并且不能,因为您不能扩展object
。
请注意,类似地,在Java中,您可以通过a.AA
访问该字段,其中a
是A
的实例;您也不能在Kotlin中做到这一点。