kotlin 嵌套和内部类
2022-04-21 本文已影响0人
Bfmall
Kotlin 嵌套类
与Java类似,Kotlin允许您在另一个称为嵌套类的类中定义一个类
class Outer {
... .. ...
class Nested {
... .. ...
}
}
由于嵌套类是其封闭类的外部(Outer)成员,因此可以使用. 符号访问嵌套类及其成员。
示例:Kotlin 嵌套类的使用示例
class Outer {
val a = "在嵌套类外部。"
class Nested {
val b = "在嵌套类内部。"
fun callMe() = "从嵌套类内部进行函数调用。"
}
}
fun main(args: Array<String>) {
//访问嵌套类的成员
println(Outer.Nested().b)
//创建嵌套类的对象
val nested = Outer.Nested()
println(nested.callMe())
}
运行该程序时,输出为:
在嵌套类内部。
从嵌套类内部进行函数调用。
对于 Java 用户
Kotlin中的嵌套类类似于Java中的静态嵌套类。
在Java中,当您在另一个类中声明一个类时,默认情况下它将成为一个内部类。 但是在Kotlin中,您需要使用 inner 修饰符创建一个内部类,我们将在下面讨论。
Kotlin 内部类
Kotlin中的嵌套类无权访问外部类实例。 例如,
class Outer {
val foo = "在嵌套类外部。"
class Nested {
//错误! 无法访问外部类的成员。
fun callMe() = foo
}
}
fun main(args: Array<String>) {
val outer = Outer()
println(outer.Nested().callMe())
}
上面的代码无法编译,因为我们试图从嵌套类内部访问外部类的foo属性。
为了解决这个问题,您需要用 inner 标记嵌套类来创建一个内部类。内部类携带对外部类的引用,并且可以访问外部类成员。
示例:Kotlin 内部类的使用
class Outer {
val a = "在嵌套类外部。"
inner class Inner {
fun callMe() = a
}
}
fun main(args: Array<String>) {
val outer = Outer()
println("使用外部对象: ${outer.Inner().callMe()}")
val inner = Outer().Inner()
println("使用内部对象: ${inner.callMe()}")
}
运行该程序时,输出为:
使用外部对象: 在嵌套类外部。
使用内部对象: 在嵌套类外部。