📅  最后修改于: 2023-12-03 14:43:41.963000             🧑  作者: Mango
在 Kotlin 中,我们可以在一个类中定义另一个类,这些嵌套在外部类中的类称为嵌套类或者内部类。虽然它们都是在外部类中定义的,但它们在编译后会被编译成不同的类。
嵌套类是一个完全独立的类,它不持有对外部类的引用。当我们定义一个嵌套类时,我们需要在它的前面加上 关键字
nested
或者 inner
:
class Outer {
private val name: String = "outer"
class Nested {
fun introduce() = "I am a nested class."
}
}
fun main() {
val nested = Outer.Nested()
println(nested.introduce())
}
如上所示,我们定义了一个名为 Outer
的类,并在其中定义了一个名为 Nested
的嵌套类。在 main
方法中,我们可以直接实例化 Nested
类,并调用 introduce()
方法。
当我们运行程序时,输出应该为:
I am a nested class.
因为嵌套类可以独立于外部类存在,所以通过嵌套类创建的对象不能访问外部类的任何成员。
内部类也是定义在外部类中的类,但它与嵌套类不同,内部类可以访问外部类的成员。当我们定义一个内部类时,我们需要在它的前面加上 inner
关键字。
class Outer {
private val name: String = "outer"
inner class Inner {
fun introduce() = "I am an inner class of ${name}."
}
}
fun main() {
val outer = Outer()
val inner = outer.Inner()
println(inner.introduce())
}
如上所示,我们定义了一个名为 Outer
的类,并在其中定义了一个名为 Inner
的内部类。在 main
方法中,我们必须先实例化 Outer
类,然后才能在其上调用 Inner()
实例化内部类。在内部类的 introduce()
方法中,我们访问了外部类的 name
属性。
当我们运行程序时,输出应该为:
I am an inner class of outer.
需要注意的是,内部类会持有外部类的引用,因此我们在创建内部类的对象时需要先创建外部类的对象。
通过以上的介绍,我们了解了 Kotlin 中的嵌套类和内部类的区别。嵌套类是独立于外部类存在的类,而内部类可以访问外部类的成员。当我们需要使用外部类的资源时,可以选择使用内部类,否则使用嵌套类就可以了。