當前位置:
首頁 > 最新 > Kotlin語法-修飾符、擴展

Kotlin語法-修飾符、擴展

本系列文章來學習 Kotlin 和 Anko 插件 通過 Kotlin 開發一個 Android 項目。

Kotlin-Anko學習(1) Kotlin、Anko 介紹

Kotlin-Anko學習(2) Kotlin 語法基礎-基本類型

Kotlin-Anko學習(3) Kotlin 語法基礎-關鍵字 package、Import、if、when、for、while、return、break、continue

Kotlin-Anko學習(4) Kotlin語法-類、繼承、抽象類

Kotlin-Anko學習(5) Kotlin語法-屬性、欄位、介面

Kotlin-Anko學習(6) Kotlin語法-修飾符


在 Kotlin 中有這四個可見性修飾符:private、 protected、 internal 和 public。 如果沒有顯式指定修飾符的話,默認可見性是 public。其中internal 修飾符的可見性是同一模塊,在java 中是沒有的。

修飾符的修飾對象:類、對象、介面、構造函數、方法、屬性和它們的 setter 都可以有 可見性修飾符。 (getter 總是與屬性有著相同的可見性。)


在 Kotlin 中模塊指編譯在一起的一套 Kotlin 文件:

一個 IntelliJ IDEA 模塊

一個 Maven 項目

一個 Gradle 源集

一次 <kotlinc> Ant 任務執行所編譯的一套文件


在Kotlin 中,可以在包下直接聲明函數、屬性和類、對象和介面,他們稱為頂層聲明,尤其是頂層函數、頂層屬性、頂層對象 是java中不允許的。

頂層聲明中的修飾符使用規則:

不指定任何可見性修飾符,默認為,這意味著你的聲明將隨處可見

如果你聲明為 ,它只會在聲明它的文件內可見

如果你聲明為 ,它會在相同模塊內隨處可見

不適用於頂層聲明


在 Kotlin 中類和介面內部的成員聲明與java一樣可以可見性修飾

類中修飾符的使用規則:

private ——在這個類內部(包含其所有成員)可見;

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

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

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

內部類—— 外部類不能訪問內部類的 private 成員(與java不同)

派生類——子類覆蓋一個父類的protected 成員,如果沒有指定可見性,那麼它在子類中也是protected。

這裡可見性的基本使用規則就講完了。接下來學習擴展的概念


擴展顧名思義就是增加代碼的擴展性,java中我們可以通過繼承、裝飾者模式來增加類的功能,在Kotlin 中可以通過一個特殊的聲明,實現功能的擴展,Kotlin 中有 擴展函數和擴展屬性。


Kotlin 中,擴展函數寫法:" fun 接收者類型. 函數名() "也就是被擴展的類型來作為擴展函數的前綴。

擴展是靜態解析的: 擴展的方法並沒有在類中增加新的成員,只是通過"."表達式來調用這個新函數(即:調用的擴展函數是由函數調用所在的表達式的類型來決定的, 而不是由表達式運行時求值結果決定的)

輸出結果:

擴展函數可以與類的成員函數同名,優先調用成員函數,如果是成員函數的重載,可以被調用。

輸出結果:

擴展函數可以定義可空(null)接收者,即可空的接受者類型的擴展函數,在不改變類中函數的情況下,支持可空的類型,空類型的判斷在擴展函數內部。

輸出結果:

從上面可以看出,如果D類型為空,調用 d.doo() 的方法就會報錯,我們可以定義可空的 doo() 擴展函數解決。Any.toString()就採用此方法來解決接受可空的類型。


擴展屬性與擴展函數用法相同,沒有實際的將成員插入類中,所以對幕後欄位無效的,即:擴展屬性不能有初始化器,只能定義顯示的get、set方法。


如果類中定義了伴生對象,我們可以擴展伴生對象的函數和屬性。


對於頂層擴展,在別的包,可以通過導入調用


在一個類內部你可以為另一個類聲明擴展。如果存在有多個 隱式接收者 —— 其中的對象成員可以無需通過限定符訪問。擴展聲明所在的類的實例稱為 分發接收者,擴展方法調用所在的接收者類型的實例稱為 擴展接收者。分發接收者和擴展接收者的成員名字衝突的情況,擴展接收者優先。也可以通過限定符來指定訪問

輸出結果:


動機的理解是優化代碼的寫法,通過擴展寫出更憂的代碼。

例如java 中Collections工具類:

這裡我們介紹完擴展有關的概念,擴展的加入,使得在解決日常問題中,可以更好的處理代碼的擴展性。


官方網址:https://www.kotlincn.net


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 猿來如痴 的精彩文章:

Kotlin-Anko學習(2)Kotlin語法基礎-基本類型

TAG:猿來如痴 |