2017-07-31 101 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 
相關問題