5.8.9.4 嵌套类与内部类
原文链接: https://kotlinlang.org/docs/nested-classes.html
5.8.9.4 嵌套类与内部类
类可以嵌套在其他类中:
1
2
3
4
5
6
7
8
| class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
|
接口也可以嵌套使用。类与接口的各种组合都是可能的:你可以在类中嵌套接口、在接口中嵌套类,也可以在接口中嵌套接口。
1
2
3
4
5
6
7
8
9
| interface OuterInterface {
class InnerClass
interface InnerInterface
}
class OuterClass {
class InnerClass
interface InnerInterface
}
|
内部类
标记为 inner 的嵌套类可以访问其外部类的成员。内部类持有对外部类对象的引用:
1
2
3
4
5
6
7
8
| class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
|
关于内部类中 this 的消歧,请参阅带限定符的 this 表达式。
匿名内部类
匿名内部类实例通过对象表达式创建:
1
2
3
4
5
6
| window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { ... }
override fun mouseEntered(e: MouseEvent) { ... }
})
|
注意: 在 JVM 上,如果该对象是某个函数式 Java 接口(即只含一个抽象方法的 Java 接口)的实例,你可以用前缀为该接口类型的 lambda 表达式来创建它:kotlin val listener = ActionListener { println("clicked") }