巢狀類別和內部類別
以下是 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 關鍵字 |
使用情境 | 與外部類別關聯性較低的類別 | 與外部類別強關聯的類別 |