Spec-Zone.ru › Kotlin 2

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

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

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

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

val listener = ActionListener { println("clicked") }
25 сентября 2024 г.
Встраиваемые классы-значенияФункциональные интерфейсы (SAM)

© 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

Spec-Zone.ru

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