Kotlin 嵌套和內(nèi)部類

在本文中,您將借助示例學習使用嵌套類和內(nèi)部類。

Kotlin 嵌套類

與Java類似,Kotlin允許您在另一個稱為嵌套類的類中定義一個類

class Outer {
    ... .. ...
    class Nested {
        ... .. ...
    }
}

由于嵌套類是其封閉類的外部(Outer)成員,因此可以使用. 符號訪問嵌套類及其成員。

示例:Kotlin 嵌套類的使用示例

class Outer {

    val a = "在嵌套類外部。"

    class Nested {
        val b = "在嵌套類內(nèi)部。"
        fun callMe() = "從嵌套類內(nèi)部進行函數(shù)調(diào)用。"
    }
}

fun main(args: Array<String>) {
    //訪問嵌套類的成員
    println(Outer.Nested().b)

    //創(chuàng)建嵌套類的對象
    val nested = Outer.Nested()
    println(nested.callMe())
}

運行該程序時,輸出為:

在嵌套類內(nèi)部。
從嵌套類內(nèi)部進行函數(shù)調(diào)用。

對于 Java 用戶

Kotlin中的嵌套類類似于Java中的靜態(tài)嵌套類。

在Java中,當您在另一個類中聲明一個類時,默認情況下它將成為一個內(nèi)部類。 但是在Kotlin中,您需要使用 inner 修飾符創(chuàng)建一個內(nèi)部類,我們將在下面討論。

Kotlin 內(nèi)部類

Kotlin中的嵌套類無權(quán)訪問外部類實例。 例如,

class Outer {
    val foo = "在嵌套類外部。"

    class Nested {
        //錯誤! 無法訪問外部類的成員。
        fun callMe() = foo
    }
}

fun main(args: Array<String>) {

    val outer = Outer()
    println(outer.Nested().callMe())
}

上面的代碼無法編譯,因為我們試圖從嵌套類內(nèi)部訪問外部類的foo屬性。

為了解決這個問題,您需要用 inner 標記嵌套類來創(chuàng)建一個內(nèi)部類。內(nèi)部類攜帶對外部類的引用,并且可以訪問外部類成員。

示例:Kotlin 內(nèi)部類的使用

class Outer {

    val a = "在嵌套類外部。"

    inner class Inner {
        fun callMe() = a
    }
}

fun main(args: Array<String>) {

    val outer = Outer()
    println("使用外部對象: ${outer.Inner().callMe()}")

    val inner = Outer().Inner()
    println("使用內(nèi)部對象: ${inner.callMe()}")
}

運行該程序時,輸出為:

使用外部對象: 在嵌套類外部。
使用內(nèi)部對象: 在嵌套類外部。
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清