Java允许通过它的孩子访问Kotlin的基本变量,但不允许Kotlin访问,为什么?
问题描述:
我有一个类,如下Java允许通过它的孩子访问Kotlin的基本变量,但不允许Kotlin访问,为什么?
open class KotlinBase {
companion object {
const val TAG = "testing"
}
}
而作为
class KotlinChild : KotlinBase()
它的孩子。当我试图从一个Java类访问标记,我既可以
public class JavaOther {
String test1 = KotlinBase.TAG; // This is okay
String test2 = KotlinChild.TAG; // This is okay
}
然而,当从Kotlin课程访问时,我无法通过孩子访问。
class KotlinOther {
val test1 = KotlinChild.TAG // Compile/Syntax error
val test2 = KotlinBase.TAG // This is okay
}
为什么不能我科特林级接入继承的变量TAG
通过KotlinChild
?
答
这是一个设计决策,可以避免含糊不清。 - 子类可以拥有自己的companion object
,其字段/方法与父类中的名称相同。
通过仅通过实际类限制对同伴的访问,模糊字段/方法投影的问题不再存在。
此外,伴侣对象不是static
已知其他语言的成员。尽管大多数用例重叠。
此外,请记住,
KotlinBase.TAG
是一个快捷方式:
KotlinBase.Companion.TAG