Kotlin 嵌套类
与 Java 类似,Kotlin 允许您在另一个类中定义一个类,称为嵌套类。
类外层{
…………
类嵌套{
…………
}
}
由于类 Nested 是其封闭类 Outer 的成员,.
可用于访问 嵌套
类和符号他们的成员。
示例:Kotlin 嵌套类
类外层{
val a =“嵌套类之外。”
类嵌套{
val b =“嵌套类内部。”
fun callMe() = "从嵌套类内部调用函数。"
}
}
有趣的主要(参数:数组){
// 访问嵌套类的成员
println(Outer.Nested().b)
// 创建嵌套类的对象
val 嵌套 = Outer.Nested()
println(嵌套的.callMe())
}
运行此程序时,输出为:
在嵌套类中。
从嵌套类内部调用函数。
对于 Java 用户
Kotlin 中的嵌套类与 Java 中的静态嵌套类类似。
在Java中,当你在另一个类中声明一个类时,它默认成为内部类。但在 Kotlin 中,您需要使用 inner 修饰符创建一个内部类,我们将在下面讨论。
Kotlin 内部类
Kotlin 中的嵌套类无法访问外部类实例。例如,
类外层{
val foo =“嵌套类之外。”
类嵌套{
// 错误!无法访问外部类的成员。
有趣的 callMe() = foo
}
}
有趣的主要(参数:数组){
val 外部 = 外部()
println(outer.Nested().callMe())
}
上面的代码无法编译,因为我们试图从 Nested 类内部访问 Outer 类的 foo 属性。
要解决这个问题,需要创建一个内部类,将嵌套类标记为inner。内部类拥有对外部类的引用,并且可以访问外部类的成员。
示例:Kotlin 内部类
类外层{
val a =“嵌套类之外。”
内部类内部{
有趣的 callMe() = a
}
}
有趣的主要(参数:数组){
val 外部 = 外部()
println("使用外部对象:${outer.Inner().callMe()}")
val 内部 = Outer().Inner()
println("使用内部对象:${inner.callMe()}")
}
运行此程序时,输出为:
使用外部对象:外部嵌套类。
使用内部对象:外部嵌套类。
推荐阅读: 匿名内部类