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]