Kotlin——中級篇(三):可見性修飾符詳解

Jetictors發表於2019-03-04
Kotlin——中級篇(三):可見性修飾符詳解

Kotlin中,不管是類,物件,介面,建構函式,函式,屬性及其設定器都具有可見性修飾符。Kotlin中的可見性修飾符共四種。即public、protected、private、internal。在不同的場景宣告不同的修飾符都有不同的可見性。下面詳解介紹不同的修飾符在不同場景的範圍。
這裡值得注意的是,屬性的Getter()函式的可見性具有與屬性相同的可見性。

目錄

Kotlin——中級篇(三):可見性修飾符詳解

一、 四種修飾符的說明

  • public修飾符表示 公有 。此修飾符的範圍最大。當不宣告任何修飾符時,系統會預設使用此修飾符。
  • internal修飾符表示 模組 。對於模組的範圍在下面會說明。
  • protected修飾符表示 私有+子類。值得注意的是,此修飾符不能用於頂層宣告,在下面可以看到。
  • private修飾符表示 私有 。此修飾符的範圍最小,即可見性範圍最低。

二、在不同場景下各個修飾符宣告的範圍講解

對於可見性修飾符來說,不管是Java還是Kotlin,在不同的場景下用可見性修飾符修飾過的變數、函式、屬性等都有不同的引用範圍。

2.1、在包(package)中宣告,即頂層宣告的情況

在頂層申明中分為下面兩種情況:

  • 在同一個檔案中訪問的情況
  • 在不同檔案中訪問的情況

2.1.1、測試同一個檔案中宣告不同的修飾符的範圍

在同一個檔案中的訪問情況

2.1.2、測試不同檔案中宣告不同的修飾符的範圍

在不同檔案中的訪問情況

2.1.3、小結

  • 在頂層情況下宣告的變數、方法、類、介面等,不能使用protected修飾符。
  • public修飾符可省略,因為它是系統預設的。
  • 在同一檔案下,用任意修飾符都可以訪問,當然此處除開protected修飾符
  • 在不同檔案下,只能訪問publicinternal修飾符修飾的變數、方法等
  • 上邊只演示了在頂層宣告方法的情況,不過宣告其他的也是一樣的。

2.2、在類(class)和介面(interface)中宣告的情況

  • 在類中宣告的情況和在介面中宣告的情況是完全不相同的。

2.2.1、測試在類中宣告的情況

在類中宣告的情況

2.2.2、測試在介面中宣告的情況

在介面中宣告的情況
使用在介面中宣告的屬性

2.2.3、小結

  • 在類中宣告屬性、方法等,可以使用任意修飾符修飾。並且在類中的任意位置都能訪問各個修飾符修飾的屬性、方法等。
  • 在類外,只能訪問由publicinternal修飾符修飾的屬性、方法。此情況不管是不是在同一個檔案中去操作。
  • 在介面中宣告的情況下,只能由public修飾符修飾屬性。方法可由publicprivate兩個修飾符去修飾,但是,用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的預設修飾符為publicJava的預設修飾符為default

四、總結

此節主要涉及的知識大部分是理論知識,上面分析了各個修飾符在每一種情況下的範圍使用。這一節是很基礎的東西,但是越是基礎的東西越是容易忘記,甚至記得不清晰,各位可以好好看一下各種情況下的截圖,上面寫的很是清晰,並且對每一點下面都作了小結。

如果各位大佬看了之後感覺還闊以,就請各位大佬隨便star一下,您的關注是我最大的動力。
我的個人部落格Jetictors
我的githubJetictors

歡迎各位大佬進群共同研究、探索

QQ群號:497071402
Kotlin——中級篇(三):可見性修飾符詳解

相關文章