Вложенные и внутренние классы
Классы могут быть вложенными в другие классы:
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
Внутренние классы
Класс может быть помечен как inner, что дает возможность доступа к членам внешнего класса.
Внутренние классы содержать ссылку на объект внешнего класса.
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
Анонимные внутренние классы
Экземпляры анонимных внутренних классов создаются используя object выражение:
window.addMouseListener(object: MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { ... }
override fun mouseEntered(e: MouseEvent) { ... }
})
Если объект является экземпляром функционального Java интерфейса, то есть у Java интерфейса один абстрактным метод, то вы можете создать объект используя лямбда выражение с префиксом в виде типа интрефейса:
val listener = ActionListener { println("clicked") }
Комментарии
Отправить комментарий