Kotlin Reference: Nested Classes
类可以嵌套进其他的类中:
[code lang=”kotlin”]class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2[/code]
【注】Kotlin 的嵌套类默认不携带外部类的引用,相当于 Java 的静态嵌套类。
Inner classes
可以把类标记为 inner
,这样该类就可以方位外部类的成员。内部类会携带外部类对象的引用:
[code lang=”kotlin”]class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1[/code]
关于在内部类中消除 this
歧义的方法,请参考限定的 this
表达式 。
Anonymous inner classes
使用对象表达式(Object Expression)可以创建匿名内部类的实例:
[code lang=”kotlin”]window.addMouseListener(object: MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// …
}
override fun mouseEntered(e: MouseEvent) {
// …
}
})[/code]
如果对象是一个函数式 Java 接口(只有一个抽象方法的 Java 接口)的实例,可以通过以接口类型作为前缀的 Lambda 表达式来创建:
[code lang=”kotlin”]val listener = ActionListener { println(“clicked”) }[/code]