Java允许通过它的孩子访问Kotlin的基本变量,但不是Kotlin,为什么?

时间:2017-07-31 05:10:18

标签: 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类不能通过TAG访问继承的变量KotlinChild

1 个答案:

答案 0 :(得分:5)

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

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

此外,伴随对象不是其他语言的static成员。虽然,大多数用例重叠。

另外,请记住

KotlinBase.TAG

是:

的快捷方式
KotlinBase.Companion.TAG