Kotlin的隱藏和封裝

封裝是面向對象的三大特徵之一(另外兩個特徵是繼承和多態)。

封裝是面向對象編程語言對客觀世界的模擬。對一個類或對象實現良好的封裝,可以實現以下目的:

  • 隱藏類的實現細節;
  • 讓使用者只能通過事先預定的方法來訪問數據,從而可以在該方法里加入控制邏輯,限制對屬性的不合理訪問。
  • 可進行數據檢查,從而有利於保證對象信息的完整性。
  • 便於修改,提高代碼的可維護性。

爲了實現良好的封裝,需要從兩個方面考慮:

  • 將對象的屬性和實現細節隱藏起來,不允許外部直接訪問。
  • 把方法暴露出來,讓方法來控制對這些屬性進行安全的訪問和操作。

封裝實際上有兩方面的含義:把該隱藏的隱藏起來,把該暴露的暴露出來

封裝需要通過使用包和訪問權限修飾符來實現。

一、包和導包

如果希望把函數、類放在指定的包結構下,應該在Kotlin源程序的第一個非註釋行放置如下格式的代碼:

package  packagename

位於包中的類,在文件系統中也必須有與包名層次相同的目錄結構。

Kotlin的包需要兩個方面的保證:

  1. 在源程序中使用package語句指定包名;
  2. 必須將class文件放在對應的路徑下。

Kotlin的import語法和Java類似,支持精確導入和通配符導入。

精確導入:

import  test.Bar

通配符導入:

import foo.*

Kotlin的import不僅可以導入類,還可以導入如下內容:

  • 頂層函數及屬性
  • 在對象聲明中聲明的函數和屬性
  • 枚舉常量

Kotlin的import語句支持as關鍵字,可以爲導入類指定別名。

二、Kotlin的默認導入

Kotlin默認會導入如下包:

  • kotlin.*
  • kotlin.annotation.*
  • kotlin.collections.*
  • kotlin.comparisons.*
  • kotlin.io.*
  • kotlin.ranges.*
  • kotlin.sequences.*
  • kotlin.text.*

對於JVM平臺,還會自動導入如下兩個包:

  • java.lang.*
  • kotlin.jvm.*

對於JavaScript平臺,則額外導入如下包:

  • kotlin.js.*

三、使用訪問控制符

Kotlin提供了4個訪問控制符:private、internal、protected和public,分別代表4個訪問控制級別:

  • private:private成員只能在該類的內部或文件的內部被訪問。
  • internal:internal成員可以在該類的內部或文件的內部或者同一個模塊內被訪問。
  • protected:protected成員可以在該類的內部或文件的內部或者其子類中被訪問。
  • public:public成員可以在任意地方被訪問。

如果Kotlin沒有顯式指定修飾符的話,默認的訪問控制修飾符是public。

3.1、Kotlin的訪問控制修飾符與Java的區別有如下幾點

  • Kotlin取消了Java的默認訪問權限,引入了internal訪問控制符(模塊訪問權限)。
  • Kotlin取消了protected的包訪問權限。
  • Kotlin的默認訪問控制符是public。

模塊是編譯在一起的一套Kotlin文件,模塊的存在形式如下:

  • 一個IntelliJ IDEA模塊
  • 一個Maven項目
  • 一個Gradle源集
  • 一次<kotlinc>的Ant任務執行所編譯的一套文件

3.2、Kotlin不同作用域中的成員可支持的訪問控制符。

1、位於包內的頂層成員
位於包內的頂層成員,只能使用private、internal和public其中之一,不能使用protected修飾符。

  • 使用private修飾,這些頂層成員只能在當前文件中被訪問。
  • 使用internal修飾,這些頂層成員只能在當前文件或當前模塊中被訪問。
  • 不加修飾符或使用public修飾,這些頂層成員可以在任意地方被訪問。

2、位於類、接口之內的成員
對於位於類、接口之內的成員,能使用private、internal、protected和public其中之一。

  • 使用private修飾,這些成員只能在該類中被訪問。
  • 使用internal修飾,這些成員能在該類或當前模塊中被訪問。
  • 使用protected修飾,這些成員在該類或該類的子類中被訪問。
  • 不加修飾符或使用public修飾,這些承壓UN可以在任意地方被訪問。

類的主構造器在類頭部分聲明。如果需要爲主構造器指定訪問權限修飾符,則一定要使用constructor關鍵字,並在該關鍵字前面添加private、internal、protected和public其中之一。

主構造器默認的訪問權限修飾符是public。

局部聲明的作用域僅在該方法內有效,使用訪問控制符沒有任何意義,所以不能使用private、internal、protected、public修飾符。

今年年初我花一個月的時間收錄整理了一套知識體系,如果有想法深入的系統化的去學習的,可以私信我【安卓】,我會把我收錄整理的資料都送給大家,幫助大家更快的進階。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章