我有一个课程如下
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
?
答案 0 :(得分:5)
这是一个允许您避免含糊不清的设计决策。 - 子类可以拥有自己的companion object
,其字段/方法与父级中的字段/方法具有相同的名称。
通过仅通过实际类限制对同伴的访问,不再存在模糊字段/方法阴影的问题。
此外,伴随对象不是其他语言的static
成员。虽然,大多数用例重叠。
另外,请记住
KotlinBase.TAG
是:
的快捷方式KotlinBase.Companion.TAG