Вложенные и внутренние классы
Классы могут быть вложены в другие классы:
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
Внутренние классы
Вложенный класс, помеченный как внутренний, может обращаться к членам своего внешнего класса. Внутренние классы содержат ссылку на объект внешнего класса:
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) { ... }
})
Примечание: в JVM, если объект является экземпляром функционального Java интерфейса (т.е. Java интерфейса с одним абстрактным методом), вы можете создать его, используя лямбда-выражение, префикс которого указывает тип интерфейса:
val listener = ActionListener { println("clicked") }
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/nested-classes.html