嵌套和内部类

类可以嵌套在其他类中:

class Outer {
    private val bar: Int = 1
    class Nested {
        fun foo() = 2
    }
}

val demo = Outer.Nested().foo() // == 2

内部类

一个类可以标记为 inner,这样它就可以访问外部类的成员。内部类持有外部类对象的引用:

class Outer {
    private val bar: Int = 1
    inner 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") }

results matching ""

    No results matching ""