在Kotlin中,嵌套类和内部类的主要区别在于它们的可见性以及如何持有外部类的引用。
- 嵌套类(Nested Classes):
嵌套类默认是静态的(即等同于Java中的static),可以有修饰符(如private、protected),可以访问外部类的成员。
class Outer {
private class Nested {
fun foo() = "foo"
}
fun bar() = Nested().foo() // 正确,因为Nested是private
}
- 内部类(Inner Classes): 内部类持有外部类的引用,可以访问外部类的私有成员。
class Outer {
private val bar = "bar"
inner class Inner {
fun foo() = bar // 正确,因为Inner可以访问Outer的私有成员
}
}
// 使用内部类
val inner = Outer().Inner()
println(inner.foo()) // 输出 "bar"
内部类经常用于定义在某个类的作用域内,只为外部类服务的类。而嵌套类则更多地用于创建独立的、不需要访问外部类成员的类。