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

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

目錄

1、 四種修飾符的說明

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

2、在不一樣場景下各個修飾符聲明的範圍講解

對於可見性修飾符來講,不論是Java仍是Kotlin,在不一樣的場景下用可見性修飾符修飾過的變量、函數、屬性等都有不一樣的引用範圍。github

2.一、在包(package)中聲明,即頂層聲明的狀況

在頂層申明中分爲下面兩種狀況:函數

  • 在同一個文件中訪問的狀況
  • 在不一樣文件中訪問的狀況

2.1.一、測試同一個文件中聲明不一樣的修飾符的範圍 測試

在同一個文件中的訪問狀況

2.1.二、測試不一樣文件中聲明不一樣的修飾符的範圍 code

在不一樣文件中的訪問狀況

2.1.三、小結cdn

  • 在頂層狀況下聲明的變量、方法、類、接口等,不能使用protected修飾符。
  • public修飾符可省略,由於它是系統默認的。
  • 在同一文件下,用任意修飾符均可以訪問,固然此處除開protected修飾符
  • 在不一樣文件下,只能訪問publicinternal修飾符修飾的變量、方法等
  • 上邊只演示了在頂層聲明方法的狀況,不過聲明其餘的也是同樣的。

2.二、在類(class)和接口(interface)中聲明的狀況

  • 在類中聲明的狀況和在接口中聲明的狀況是徹底不相同的。

2.2.一、測試在類中聲明的狀況 對象

在類中聲明的狀況

2.2.二、測試在接口中聲明的狀況 blog

在接口中聲明的狀況
使用在接口中聲明的屬性

2.2.三、小結接口

  • 在類中聲明屬性、方法等,可使用任意修飾符修飾。而且在類中的任意位置都能訪問各個修飾符修飾的屬性、方法等。
  • 在類外,只能訪問由publicinternal修飾符修飾的屬性、方法。此狀況不論是不是在同一個文件中去操做。
  • 在接口中聲明的狀況下,只能由public修飾符修飾屬性。方法可由publicprivate兩個修飾符去修飾,可是,用private修飾符修飾符修飾的方法不能被實現該接口的類重寫。
  • 爲了使用接口中由public修飾符修飾的屬性、方法等。只能定義一個類去實現該接口,而後重寫其屬性、方法。這樣就能在可在類中或類外去操做。

2.三、在構造函數中聲明的狀況

構造函數中聲明的狀況

看過我前幾遍文章的都知道在Kotlin中分爲主構造函數,和副級或多級構造函數,固然在Java中也是存在的,只不過咱們更習慣稱其爲方法重載。對此還不甚清晰的,能夠閱讀個人上一篇文章Kotlin——中級篇(一):類(class)詳解。 故而,當咱們在構造函數中聲明的狀況下,若是是主構造函數的時候,是和在類(class)中聲明的狀況是同樣的。若是是主構造函數的時候,則是和在局部聲明的狀況是同樣的。get

2.四、局部聲明的狀況

局部聲明的狀況

在局部聲明的狀況下,只能使用public修飾符修飾的變量。而且在變量只能在局部這個範圍內使用,出了這個範圍後就訪問不到了。

3、與Java中的可見性修飾符的對比

  • Java中的可見性修飾符和Koltin中的可見性修飾符仍是頗有幾點不一樣之處的: 一、 四種修飾符的不一樣。Koltin的四種修飾符(public、interna、protected、private),Java的的四種修飾符(public、protected、privavte、default(即不使用任何修飾符))。 二、默認修飾符的不一樣。Kotlin的默認修飾符爲publicJava的默認修飾符爲default

4、總結

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

若是各位大佬看了以後感受還闊以,就請各位大佬隨便star一下,您的關注是我最大的動力。
個人我的博客Jetictors
個人githubJetictors

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

QQ羣號:497071402

相關文章
相關標籤/搜索