1. 程式人生 > >Kotlin-巢狀類

Kotlin-巢狀類

巢狀類

定義

說的簡單一點,就是定義在類裡面的類。一般把定義內部類的外圍類成為包裝類或者外部類。

class Outer {
    private val bar: Int = 1
    class Nested {
        fun foo() = 2
    }
} 
val demo = Outer.Nested().foo() // == 2

巢狀類的例項的建立方式與普通類稍有不同,需要先擁有其外部類的的例項,然後通過外部類的例項建立。

內部類

類可以使用 inner 關鍵字來標記, 然後就可以訪問外部類(outer class)的成員.

class Button(var text: String = "") {
    var listener: IClickListener? = null
    private val no = 10

    inner class Text {
        fun getText() = text

        fun setText(tex: String) {
            text = tex
        }

        fun printNo() {
            println("button-no: $no")
            println(getColor())
        }
    }

    private fun getColor(): String {
        return "getColor"
    }

}

內部類可以訪問外部類中的成員屬性和成員函式,這是因為內部類會儲存一個引用, 指向
外部類的物件例項。所以,在內部類使用this關鍵字時,容易引起歧義,怎麼消除歧義,我想你懂得。