Kotlin學習(11):可見性修飾符
阿新 • • 發佈:2019-02-05
1、應用域
類、物件、介面、建構函式、方法、屬性和它們的setter都可以有可見性修飾符。在Kotlin中有四個可見性修飾符:
- private
- protected
- internal
- public
如果沒有顯式指定修飾符的話,預設可見性都是public。
2、包名
函式、屬性和類、物件和介面可以在頂層宣告,即直接在包內:
package foo
fun baz(){}
class Bar{}
每一個修飾符都限制了一定的範圍:
- 未指定修飾符時,預設為
public
,表明隨處可見 - 宣告為
public
時,它只會在宣告它的檔案內可見; - 宣告為
internal
,它會在相同模組內隨處可見; protected
不適用於頂層宣告。
例如:
package foo
//在此類內隨處可見
private fun foo(){}
//該屬性隨處可見
public var bar: Int = 5
//setter只在此檔案內可見
private set
//相同模組內可見
internal val baz = 6
3、類和介面
對於類內部宣告的成員:
private
意味著只在這個類內部(包含其所有成員)可見;protected
和private
一樣+在子類中可見。internal
能剪刀類宣告的本模組內的任何客戶端都可見其internal
成員;public
能見到類宣告的任何客戶端都是可見其public
open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4
protected open class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
//b被open修飾,可以直接訪問
override val b: Int
get() = 5
val xx = Outer()
//修飾符是protected或者private
private var yy = Outer.Nested()
fun foo() {
//c,d,e可見,但是需要通過對應物件
println(xx.c)
println(xx.d)
print(yy.e)
}
}
class Unrelated(o: Outer) {
val kk = o
fun stringPrint() {
//a,b不可見,c,,d可見
print(kk.c)
print(kk.d)
}
}
要指定一個類的主建構函式的可見性,使用以下語法,需要新增一個顯式的constructor
關鍵字:
class C private constructor(a: Int){
//程式碼塊
}
4、模組
可見性修飾符internal
意味著該成員只在相同模組內可見。更具體的說,一個模組是編譯在一起的一套Kotlin檔案:
- 一個IntellJ IEDA模組;
- 一個Maven或者Gradle專案;
- 一次
<kotlinc>
Ant任務執行所編譯的一套檔案。