原文: https://beginnersbook.com/2019/03/kotlin-nested-and-inner-class/
在本指南中,您将通过示例了解 Kotlin 中的嵌套和内部类。
Kotlin 嵌套类
当一个类在另一个类中声明时,它被称为嵌套类。嵌套类类似于 Java 中的静态嵌套类。
class OuterClass {....class NestedClass {...}}
注意事项:
- 嵌套类无法访问外部类的成员。
- 要访问嵌套类的成员,我们将点(
.)运算符与外部类一起使用。
Kotlin 嵌套类示例
在下面的示例中,我们有一个外部类和一个嵌套类。此示例演示如何使用点(.)运算符访问嵌套类的成员。
class OuterClass {val oStr = "Outer Class"class NestedClass {val nStr = "Nested Class"fun demo() = "demo() function of nested class"}}fun main(args: Array<String>) {// accessing data member of nested classprintln(OuterClass.NestedClass().nStr)// accessing member function of nested classprintln(OuterClass.NestedClass().demo())// creating object of the Nested classval obj = OuterClass.NestedClass()println(obj.demo())}
输出:

Kotlin 嵌套类 - 无法访问外部类的成员
以下程序将抛出编译错误,因为嵌套类无法访问外部类的成员。这里嵌套类试图访问属于外部类的成员oStr,因此我们得到一个编译错误。我们可以通过使用内部类来解决这个问题,这将在同一篇文章的下一节中讨论。
class OuterClass {val oStr = "Outer Class"class NestedClass {val nStr = "Nested Class"fun demo() = "demo() function using $oStr"}}fun main(args: Array<String>) {println(OuterClass.NestedClass().demo())}
输出:
Compilation Error
Kotlin 内部类
使用inner修饰符声明 Kotlin 内部类。内部类可以访问外部类的成员。让我们使用上面使用内部类而不是嵌套类的相同示例。这里我们使用内部内部类访问外部类的成员oStr。
class OuterClass {val oStr = "Outer Class"inner class InnerClass {val nStr = "Nested Class"fun demo() = "demo() function using $oStr"}}fun main(args: Array<String>) {val o = OuterClass()println("${o.InnerClass().demo()}")val i = OuterClass().InnerClass()println("${i.demo()}")}
输出:

