系列文章全部為本人的學習筆記枕赵,若有任何不妥之處猜欺,隨時歡迎拍磚指正。如果你覺得我的文章對你有用烁设,歡迎關(guān)注我替梨,我們一起學習進步!
Kotlin學習筆記(1)- 環(huán)境配置
Kotlin學習筆記(2)- 空安全
Kotlin學習筆記(3)- 語法
Kotlin學習筆記(4)- 流程控制
Kotlin學習筆記(5)- 類
Kotlin學習筆記(6)- 屬性
Kotlin學習筆記(7)- 接口
Kotlin學習筆記(8)- 擴展
Kotlin學習筆記(8)- 擴展(續(xù))
Kotlin學習筆記(9)- 數(shù)據(jù)類
Kotlin學習筆記(10)- 泛型
Kotlin學習筆記(11)- 內(nèi)部類和嵌套類
Kotlin學習筆記(12)- 委托
Kotlin學習筆記(13)- 函數(shù)式編程
Kotlin學習筆記(14)- lambda
一装黑、嵌套類
嵌套類顧名思義副瀑,就是嵌套在其他類中的類。而嵌套類外部的類一般被稱為包裝類或者外部類恋谭。
class Outter{
class Nested{
fun execute(){
Log.d("test", "Nested -> execute")
}
}
}
// 調(diào)用
Outter.Nested().execute()
//輸出
Nested -> execute
二糠睡、內(nèi)部類
內(nèi)部類和嵌套類有些類似,不同點是內(nèi)部類用關(guān)鍵字inner
修飾疚颊。
class Outter{
val testVal = "test"
inner class Inner{
fun execute(){
Log.d("test", "Inner -> execute : can read testVal=$testVal")
}
}
}
// 調(diào)用
val outter = Outter()
outter.Inner().execute()
// 輸出
Inner -> execute : can read testVal=test
兩小段代碼看完狈孔,對內(nèi)部類和嵌套類都有了點了解,東西不多材义,也不難均抽。那么我們來對比看一下他們在使用中有什么不同,當然這只是我總結(jié)的很淺的不同點其掂,畢竟我也是剛學 : )
-
嵌套類可以直接創(chuàng)建實例油挥,方式是包裝類.嵌套類
val nested : Outter.Nested()
-
內(nèi)部類不能直接創(chuàng)建實例,需要通過外部類調(diào)用
val outter = Outter() outter.Inner().execute()
嵌套類不能引用包裝類的成員款熬;內(nèi)部類會帶有一個對外部包裝類的對象的引用深寥,可以訪問外部類中的成員屬性和成員函數(shù)。
三贤牛、匿名內(nèi)部類
使用對象表達式創(chuàng)建匿名內(nèi)部類實例
text.setOnClickListener(object : View.OnClickListener{
override fun onClick(p0: View?) {
Log.d("test", p0.string())
}
})
完整的寫法應該是這樣惋鹅,但是通常我們用的是簡捷的寫法
text.setOnClickListener {
Log.d("test", it.string())
}
當然還有更簡潔的寫法,那就要用到lambda了殉簸。請看我后面的文章《Kotlin學習筆記(14)- lambda》闰集。
關(guān)于
object
的用法沽讹,可以看下劉大V的一篇文章:區(qū)別Kotlin中的object和companion object關(guān)鍵字。