Класс внутри класса в Kotlin
Класс можно объявить внутри другого класса. Такой вложенный класс не видит свойства внешнего объекта. К нему обращаются через имя внешнего типа:
class Log {
class Line(val text: String)
}
fun main() {
val line = Log.Line("ok")
println(line.text)
}
Если вложенному классу нужны поля конкретного внешнего
объекта, его помечают inner. Тогда у внутреннего
класса есть ссылка на тот экземпляр, у которого его
создали:
class Order(val id: Int) {
inner class Line(val title: String) {
fun label(): String {
return "$id $title"
}
}
}
fun main() {
val order = Order(7)
val line = order.Line("pen")
println(line.label())
}
Когда свойство внутреннего класса называется так же,
как свойство внешнего, внешнее читают через
this@ИмяКласса:
class Box(val name: String) {
inner class Item(val name: String) {
fun both(): String {
return "${this@Box.name} $name"
}
}
}
Сделайте класс Catalog с вложенным классом
Item: название и цена. Создайте Item
через имя Catalog и выведите название.
Сделайте класс Cart с названием и классом
Row с модификатором inner и полем
title. Метод Row.tag() возвращает
название корзины и title. Создайте корзину
"main", строку "pen" и выведите
tag().