Kotlin教學 | 從零開始學Kotlin | Kotlin入門 | CH13: 巢狀類別(Nested)和內部類別(Inner)

巢狀類別和內部類別

以下是 Kotlin 巢狀類別(Nested Class)內部類別(Inner Class) 的教學,包括定義、特性、差異。


1. 巢狀類別(Nested Class)

定義

  • 巢狀類別是定義在另一個類別內部的類別。
  • 巢狀類別不持有外部類別的參考。
  • 無法直接存取外部類別的屬性或方法。

範例:

class Outer {
    val outerProperty = "Outer Property"

    class Nested {
        fun printMessage() {
            println("Hello from Nested Class")
        }
    }
}

fun main() {
    val nested = Outer.Nested() // 創建巢狀類別的實例
    nested.printMessage() // 輸出:Hello from Nested Class
}

2. 內部類別(Inner Class)

定義

  • 使用 inner 關鍵字定義。
  • 內部類別持有外部類別的參考。
  • 可以直接存取外部類別的屬性和方法。

範例:

class Outer {
    val outerProperty = "Outer Property"

    inner class Inner {
        fun printMessage() {
            println("Hello from Inner Class")
            println("Accessing outer property: $outerProperty") // 可存取外部類別屬性
        }
    }
}

fun main() {
    val outer = Outer()
    val inner = outer.Inner() // 創建內部類別的實例
    inner.printMessage()
    // 輸出:
    // Hello from Inner Class
    // Accessing outer property: Outer Property
}

3. 巢狀類別與內部類別的差異

特性巢狀類別(Nested Class)內部類別(Inner Class)
外部類別的參考不持有外部類別的參考持有外部類別的參考
外部成員存取無法存取可以存取
使用關鍵字無需特殊關鍵字使用 inner 關鍵字
使用情境與外部類別關聯性較低的類別與外部類別強關聯的類別

Reference

https://kotlinlang.org/docs/nested-classes.html

發佈留言