- 作者:老汪软件技巧
- 发表时间:2024-09-22 11:00
- 浏览量:
写在前面
两者的选择取决于是否需要访问外部类的成员。如果需要访问外部类成员,选择 inner;否则使用嵌套类(静态内部类)。
Inner类(内部类)
inner 类会持有对外部类的引用,因此可以访问外部类的属性和方法。它比较适用于需要频繁访问外部类成员的场景。
示例:
class OuterClass {
private var outerProperty: String = "I am from OuterClass"
// 使用 inner 声明内部类
inner class InnerClass {
fun accessOuter() {
// 通过 this@OuterClass 引用外部类
println("Accessing from InnerClass: $outerProperty")
}
}
}
fun main() {
val outer = OuterClass()
val inner = outer.InnerClass() // 创建内部类实例
inner.accessOuter() // 调用内部类方法访问外部类成员
}
输出如下:
Accessing from InnerClass: I am from OuterClass
使用场景:
嵌套类(静态内部类)
Kotlin 中默认的嵌套类是静态的,也就是说它不持有对外部类的引用,因此不能访问外部类的成员。
示例:
class OuterClass {
private var outerProperty: String = "I am from OuterClass"
// 嵌套类(默认静态)
class NestedClass {
fun showMessage() {
// 无法访问 outerProperty,因为嵌套类不持有对外部类的引用
println("This is a nested class")
}
}
}
fun main() {
val nested = OuterClass.NestedClass() // 创建嵌套类实例
nested.showMessage() // 调用嵌套类方法
}
输出如下:
This is a nested class
使用场景
总结特点Inner 类嵌套类(静态内部类)
是否持有外部类引用
持有外部类引用,可以访问外部类成员
不持有外部类引用,不能访问外部类成员
用途
需要访问外部类的成员
不需要访问外部类成员
使用场景
事件监听、UI交互等复杂交互场景
工具类、辅助类,避免内存泄漏的场景