2017-07-31 56 views
2

我有一个类,如下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

回答

5

这是一个设计决策,可以避免含糊不清。 - 子类可以拥有自己的companion object,其字段/方法与父类中的名称相同。

通过仅通过实际类限制对同伴的访问,模糊字段/方法投影的问题不再存在。

此外,伴侣对象不是static已知其他语言的成员。尽管大多数用例重叠。

此外,请记住,

KotlinBase.TAG 

是一个快捷方式:

KotlinBase.Companion.TAG 
相关问题