Kotlin 嵌套和内部类,在本指南中,您将通过示例了解 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 class
println(OuterClass.NestedClass().nStr)
// accessing member function of nested class
println(OuterClass.NestedClass().demo())
// creating object of the Nested class
val 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()}")
}
输出: