Spec-Zone.ru › Kotlin 1.6

Вложенные и внутренние классы

Классы могут быть вложены в другие классы:

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) { ... }
})

В JVM, если объект является экземпляром функционального Java-интерфейса (то есть Java-интерфейса с одним абстрактным методом), вы можете создать его с помощью лямбда-выражения, предваряемого типом интерфейса:

val listener = ActionListener { println("clicked") }
Последнее изменение: 07 апреля 2022
Обобщения: in, out, where Перечисления

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API