クラスは他のクラスの中に入れ子にすることができます:
val demo = Outer.Nested().foo() // == 2
内部クラス
クラスは、外部クラスのメンバーにアクセスできるように inner としてマークされてもかまいません。内部クラスは、外部クラスのオブジェクトへの参照をもちます:
val demo = Outer().Inner().foo() // == 1
内部クラス内での this の曖昧さ回避について学ぶために、修飾された this 式を参照してください。
無名内部クラス
無名内部クラスのインスタンスはオブジェクト式を使用して作成されます:
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
オブジェクトが機能的なJavaインタフェースのインスタンス(つまり、あるJavaインタフェースがひとつの抽象メソッドとひもづく)である場合は、インタフェースの型が前に付いたラムダ式を使用してオブジェクトを作成できます。