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:猿來如痴 |