java - kotlin 中的静态最终字段继承

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

最佳答案

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

Kotlin 的开发人员决定不模拟此功能,因为它不符合将静态方法视为属于对象的想法:B 的伴生对象不符合这种情况。不能扩展 A 的伴生对象,因为您无法扩展对象

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

关于java - kotlin 中的静态最终字段继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684071/

相关文章:

java - struts2 在操作类中获取值(value)

java - 带有方法 toString() 的新类

android - Kotlin Gson 反序列化

android - 用于使用 Gradle (1.5.0) 构建的 Kotlin 版本与 bundle 到 IDE 插件 (1.5.0-release-764) 中的版本不同

javascript - 如何将 JavaScript 对象转换为 Kotlin 类?

java - 我必须使用什么 cplex 函数来写入这个变量?

java - 如何通过 POST 在 Angular/Spring 中注销

java - 在Java中将日期转换为带时区的时间戳

c# - : Defining a class with a method that gets an object of the class type?是什么意思

java - 如何从字节码中获取类描述?