
在Kotlin中,不管是類,對象,接口,構造函數,函數,屬性及其設置器都具有可見性修飾符。Kotlin中的可見性修飾符共四種。即public、protected、private、internal。在不同的場景聲明不同的修飾符都有不同的可見性。下面詳解介紹不同的修飾符在不同場景的范圍。
這里值得注意的是,屬性的Getter()函數的可見性具有與屬性相同的可見性。
目錄

一、 四種修飾符的說明
public修飾符表示 公有 。此修飾符的范圍最大。當不聲明任何修飾符時,系統會默認使用此修飾符。internal修飾符表示 模塊 。對於模塊的范圍在下面會說明。protected修飾符表示 私有+子類。值得注意的是,此修飾符不能用於頂層聲明,在下面可以看到。private修飾符表示 私有 。此修飾符的范圍最小,即可見性范圍最低。
二、在不同場景下各個修飾符聲明的范圍講解
對於可見性修飾符來說,不管是
Java還是Kotlin,在不同的場景下用可見性修飾符修飾過的變量、函數、屬性等都有不同的引用范圍。
2.1、在包(package)中聲明,即頂層聲明的情況
在頂層申明中分為下面兩種情況:
- 在同一個文件中訪問的情況
- 在不同文件中訪問的情況
2.1.1、測試同一個文件中聲明不同的修飾符的范圍

2.1.2、測試不同文件中聲明不同的修飾符的范圍

2.1.3、小結
- 在頂層情況下聲明的變量、方法、類、接口等,不能使用
protected修飾符。public修飾符可省略,因為它是系統默認的。- 在同一文件下,用任意修飾符都可以訪問,當然此處除開
protected修飾符- 在不同文件下,只能訪問
public、internal修飾符修飾的變量、方法等- 上邊只演示了在頂層聲明方法的情況,不過聲明其他的也是一樣的。
2.2、在類(class)和接口(interface)中聲明的情況
- 在類中聲明的情況和在接口中聲明的情況是完全不相同的。
2.2.1、測試在類中聲明的情況

2.2.2、測試在接口中聲明的情況
在接口中聲明的情況

使用接口中聲明的屬性

2.2.3、小結
- 在類中聲明屬性、方法等,可以使用任意修飾符修飾。並且在類中的任意位置都能訪問各個修飾符修飾的屬性、方法等。
- 在類外,只能訪問由
public、internal修飾符修飾的屬性、方法。此情況不管是不是在同一個文件中去操作。- 在接口中聲明的情況下,只能由
public修飾符修飾屬性。方法可由public、private兩個修飾符去修飾,但是,用private修飾符修飾符修飾的方法不能被實現該接口的類重寫。- 為了使用接口中由
public修飾符修飾的屬性、方法等。只能定義一個類去實現該接口,然后重寫其屬性、方法。這樣就能在可在類中或類外去操作。
2.3、在構造函數中聲明的情況

看過我前幾遍文章的都知道在
Kotlin中分為主構造函數,和副級或多級構造函數,當然在Java中也是存在的,只不過我們更習慣稱其為方法重載。對此還不甚清晰的,可以閱讀我的上一篇文章Kotlin——中級篇(一):類(class)詳解。
故而,當我們在構造函數中聲明的情況下,如果是主構造函數的時候,是和在類(class)中聲明的情況是一樣的。如果是主構造函數的時候,則是和在局部聲明的情況是一樣的。
2.4、局部聲明的情況
在局部聲明的情況下,只能使用
public修飾符修飾的變量。並且在變量只能在局部這個范圍內使用,出了這個范圍后就訪問不到了。
三、與Java中的可見性修飾符的對比
Java中的可見性修飾符和Koltin中的可見性修飾符還是很有幾點不同之處的:
1、 四種修飾符的不同。Koltin的四種修飾符(public、interna、protected、private),Java的的四種修飾符(public、protected、privavte、default(即不使用任何修飾符))。
2、默認修飾符的不同。Kotlin的默認修飾符為public,Java的默認修飾符為default。
四、總結
此節主要涉及的知識大部分是理論知識,上面分析了各個修飾符在每一種情況下的范圍使用。這一節是很基礎的東西,但是越是基礎的東西越是容易忘記,甚至記得不清晰,各位可以好好看一下各種情況下的截圖,上面寫的很是清晰,並且對每一點下面都作了小結。
如果各位大佬看了之后感覺還闊以,就請各位大佬隨便star一下,您的關注是我最大的動力。
我的個人博客:Jetictors
我的掘金:Jetictors
Github:Jetictors

