НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
1253 of 1310 menu

Ключевое слово inner

Ключевое слово inner используется для объявления внутренних классов. Внутренний класс имеет доступ ко всем членам внешнего класса, включая приватные поля и методы. Для создания экземпляра внутреннего класса необходим экземпляр внешнего класса.

Синтаксис

class Outer { inner class Inner { // тело внутреннего класса } }

Пример

Создадим внешний класс Outer с полем outerField и внутренний класс Inner, который имеет доступ к полю внешнего класса:

class Outer { private val outerField: String = "Hello from Outer" inner class Inner { fun printOuterField() { println(outerField) } } } val outer = Outer() val inner = outer.Inner() inner.printOuterField()

Результат выполнения кода:

String "Hello from Outer"

Пример

Внутренний класс имеет доступ к this внешнего класса через квалификатор @Outer:

class Outer { val name: String = "Outer" inner class Inner { val name: String = "Inner" fun printNames() { println("Inner name: " + this.name) println("Outer name: " + this@Outer.name) } } } val outer = Outer() val inner = outer.Inner() inner.printNames()

Результат выполнения кода:

String "Inner name: Inner" String "Outer name: Outer"

Пример

Внутренний класс может обращаться к методам внешнего класса:

class Outer { private fun outerMethod(): String { return "Outer method called" } inner class Inner { fun callOuterMethod(): String { return outerMethod() } } } val outer = Outer() val inner = outer.Inner() val res = inner.callOuterMethod() println(res)

Результат выполнения кода:

String "Outer method called"

Пример

Без ключевого слова inner класс становится вложенным, но не внутренним, и не имеет доступа к членам внешнего класса:

class Outer { private val outerField: String = "Hello" class Nested { // Ошибка компиляции: не видит outerField // fun printField() { println(outerField) } } }

Смотрите также

  • ключевое слово class,
    которое используется для объявления классов
  • ключевое слово object,
    которое используется для создания объектов-одиночек
  • ключевое слово companion,
    которое используется для создания companion-объектов
  • ключевое слово nested,
    которое используется для вложенных классов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить