kotlin 學(xué)習(xí)(4)

可見性修飾符

類、對象、接口、構(gòu)造函數(shù)、方法、屬性和它們的 setter 都可以有?可見性修飾符。 (getter 總是與屬性有著相同的可見性。) 在 Kotlin 中有這四個(gè)可見性修飾符:private、?protected、?internal?和?public。 如果沒有顯式指定修飾符的話,默認(rèn)可見性是?public。

在本頁可以學(xué)到這些修飾符如何應(yīng)用到不同類型的聲明作用域。

函數(shù)、屬性和類、對象和接口可以在頂層聲明,即直接在包內(nèi):

// 文件名:example.kt

packagefoo

?

funbaz() {……}

classBar{……}

如果你不指定任何可見性修飾符,默認(rèn)為?public,這意味著你的聲明將隨處可見;

如果你聲明為?private,它只會在聲明它的文件內(nèi)可見;

如果你聲明為?internal,它會在相同模塊內(nèi)隨處可見;

protected?不適用于頂層聲明。

注意:要使用另一包中可見的頂層聲明,仍需將其導(dǎo)入進(jìn)來。

例如:

// 文件名:example.kt

packagefoo

?

privatefunfoo() {……}// 在 example.kt 內(nèi)可見

?

publicvarbar:Int=5// 該屬性隨處可見

privateset// setter 只在 example.kt 內(nèi)可見


internalvalbaz=6// 相同模塊內(nèi)可見

類和接口

對于類內(nèi)部聲明的成員:

private?意味著只在這個(gè)類內(nèi)部(包含其所有成員)可見;

protected—— 和?private一樣 + 在子類中可見。

internal?—— 能見到類聲明的?本模塊內(nèi)?的任何客戶端都可見其?internal?成員;

public?—— 能見到類聲明的任何客戶端都可見其?public?成員。

請注意在 Kotlin 中,外部類不能訪問內(nèi)部類的 private 成員。

如果你覆蓋一個(gè)?protected?成員并且沒有顯式指定其可見性,該成員還會是?protected?可見性。

例子:

openclassOuter{

privatevala=1

protectedopenvalb=2

internalvalc=3

vald=4// 默認(rèn) public


protectedclassNested{

publicvale:Int=5

? ? }

}

?

classSubclass:Outer() {

// a 不可見

// b、c、d 可見

// Nested 和 e 可見

?

overridevalb=5// “b”為 protected

}

?

classUnrelated(o:Outer) {

// o.a、o.b 不可見

// o.c 和 o.d 可見(相同模塊)

// Outer.Nested 不可見,Nested::e 也不可見

}

構(gòu)造函數(shù)

要指定一個(gè)類的的主構(gòu)造函數(shù)的可見性,使用以下語法(注意你需要添加一個(gè)顯式?constructor?關(guān)鍵字):

classCprivateconstructor(a:Int) {……}

這里的構(gòu)造函數(shù)是私有的。默認(rèn)情況下,所有構(gòu)造函數(shù)都是?public,這實(shí)際上等于類可見的地方它就可見(即 一個(gè)?internal?類的構(gòu)造函數(shù)只能在相同模塊內(nèi)可見).

局部聲明

局部變量、函數(shù)和類不能有可見性修飾符。

模塊

可見性修飾符?internal?意味著該成員只在相同模塊內(nèi)可見。更具體地說, 一個(gè)模塊是編譯在一起的一套 Kotlin 文件:

一個(gè) IntelliJ IDEA 模塊;

一個(gè) Maven 項(xiàng)目;

一個(gè) Gradle 源集(例外是?test?源集可以訪問?main?的 internal 聲明);

一次?<kotlinc>?Ant 任務(wù)執(zhí)行所編譯的一套文件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容