Вложенные и внутренние классы
Классы можно вкладывать в другие классы:
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 во внутренних классах.
Анонимные внутренние классы
Экземпляры анонимных внутренних классов создаются с помощью выражения object:
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { ... }
override fun mouseEntered(e: MouseEvent) { ... }
})
25 сентября 2024 г.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/nested-classes.html