Java允许通过它的孩子来访问Kotlin的基本变量,但不是Kotlin,为什么?
我有一个类如下
open class KotlinBase { companion object { const val TAG = "testing" } }
和它的一个孩子一样
class KotlinChild : KotlinBase()
当我尝试从Java类访问TAG时,我也可以
public class JavaOther { String test1 = KotlinBase.TAG; // This is okay String test2 = KotlinChild.TAG; // This is okay }
但是,从Kotlin课程访问时,我无法通过Child访问。
class KotlinOther { val test1 = KotlinChild.TAG // Compile/Syntax error val test2 = KotlinBase.TAG // This is okay }
为什么我的Kotlin类不能通过KotlinChild
访问继承的变量TAG
?
这是一个设计决定,可以避免含糊不清。 – 子类可以拥有自己的companion object
,其字段/方法与父类中的名称相同。
通过仅通过实际类限制对同伴的访问,不存在模糊字段/方法遮蔽的问题。
此外,伴侣对象不是从其他语言中已知的static
成员。 尽管大部分用例重叠。
另外,请记住
KotlinBase.TAG
是一个捷径:
KotlinBase.Companion.TAG