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 访问字段 AA(从 A): B.AA 。但是,在 Kotlin 中这是不可能的。访问它的唯一方法是通过 A.AA。这是内置功能还是我做错了什么?


元芳怎么了
浏览 233回答 1
1回答

慕娘9325324

在 Java 中,当编译器看到 时B.AA,它会自动将其转换为A.AA. 那里没有真正的继承或覆盖。Kotlin 的开发人员决定不模拟此功能,因为它不符合将静态方法视为属于 的想法object: 的伴生对象B不扩展 的伴生对象A,并且不能因为您无法扩展object.请注意,类似地,在 Java 中,您可以通过a.AAwherea是A;的实例来访问该字段。你也不能在 Kotlin 中做到这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java