Ключевое слово nested
Ключевое слово nested применяется для объявления
вложенных классов в Kotlin. Вложенные классы не имеют
доступа к членам внешнего класса, если только эти члены
не объявлены с модификатором companion.
Для создания вложенного класса используется синтаксис
class Outer { nested class Inner }.
Синтаксис
class Outer {
nested class Nested {
// тело вложенного класса
}
}
Пример
Создадим внешний класс Car с вложенным классом Engine:
class Car {
nested class Engine {
fun start() {
println("Engine started")
}
}
}
Пример
Создадим экземпляр вложенного класса:
val engine = Car.Engine()
engine.start()
Результат выполнения кода:
String "Engine started"
Пример
Попытка доступа к членам внешнего класса из вложенного класса:
class Car(val model: String = "Sedan") {
nested class Engine {
fun showModel() {
// println(model) - ошибка компиляции!
// Вложенный класс не имеет доступа к членам внешнего класса
}
}
}
Пример
Доступ к companion object из вложенного класса:
class Car {
companion object {
const val BRAND = "Toyota"
}
nested class Engine {
fun showBrand() {
println("Brand: $BRAND")
}
}
}
Результат выполнения кода:
val engine = Car.Engine()
engine.showBrand()
String "Brand: Toyota"
Пример
Вложенные классы могут содержать свойства и методы:
class Computer {
nested class Processor {
val cores = 8
val frequency = 3.5
fun getInfo(): String {
return "$cores cores, ${frequency}GHz"
}
}
}
val processor = Computer.Processor()
println(processor.getInfo())
println("Cores: ${processor.cores}")
Результат выполнения кода:
String "8 cores, 3.5GHz"
String "Cores: 8"