Kotlin中的静态最终字段继承

时间:2018-10-06 23:04:51

标签: java class kotlin

我在这里有一个非常简单的问题,但无法弄清楚。 考虑一个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。 这是内置功能还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

在Java中,当编译器看到B.AA时,它将自动将其转换为A.AA。没有真正的继承或覆盖。

Kotlin的开发人员决定不仿制此功能,因为它不适合将静态方法视为属于object的想法:B的伴随对象未扩展A,并且不能,因为您不能扩展object

请注意,类似地,在Java中,您可以通过a.AA访问该字段,其中aA的实例;您也不能在Kotlin中做到这一点。