巢狀類別和內部類別#
以下是 Kotlin 巢狀類別(Nested Class) 和 內部類別(Inner Class) 的教學,包括定義、特性、差異。
1. 巢狀類別(Nested Class)#
- 巢狀類別是定義在另一個類別內部的類別。
- 巢狀類別不持有外部類別的參考。
- 無法直接存取外部類別的屬性或方法。
範例:#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 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 關鍵字定義。 - 內部類別持有外部類別的參考。
- 可以直接存取外部類別的屬性和方法。
範例:#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 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