Вложенные и внутренние классы
Классы могут быть вложены в другие классы:
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) { ... }
})
Последнее изменение: 10 января 2023 г.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/nested-classes.html