嵌套和内部类
类可以嵌套在其他类中:
class Outer {private val bar: Int = 1class Nested {fun foo() = 2}}val demo = Outer.Nested().foo() // == 2
内部类
一个类可以标记为 inner,这样它就可以访问外部类的成员。内部类持有外部类对象的引用:
class Outer {private val bar: Int = 1inner class Inner {fun foo() = bar}}val demo = Outer().Inner().foo() // == 1
关于如何消除 this 在内部类中的歧义可参考限定的 this 表达式。
匿名内部类
匿名内部类的实例可通过对象表达式来创建:
window.addMouseListener(object: MouseAdapter() {override fun mouseClicked(e: MouseEvent) {// ...}override fun mouseEntered(e: MouseEvent) {// ...}})
如果这个对象是一个函数式的 Java 接口的实例(例如,一个带有单个抽象函数的 Java 接口),可以使用 lambda 表达式来创建,但是要把这个接口类型作为表达式的前缀:
val listener = ActionListener { println("clicked") }
