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