Запись на курсы по HTML, CSS, JavaScript, PHP, Python, фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
1253 of 1310 menu
Бесплатный курс по выкладке сайтов на хостинг. Разбираем все нюансы! Начало 14 октября. Жми для записи!

Ключевое слово 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,
    которое используется для вложенных классов