Назад к вопросам
Middle
113
questionbank
Что такое вложенные (nested) и внутренние (inner) классы в Kotlin?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Вложенный класс (nested) не имеет доступа к членам внешнего класса. Он является просто классом, объявленным внутри другого.
class Outer {
private val outerParameter = 1
class Nested {
fun printSomething() {
// Ошибка компиляции: Cannot access 'outerParameter': it is private in 'Outer'
// println(outerParameter)
println("Hello from nested class")
}
}
}
Внутренний класс (inner) имеет доступ к членам внешнего класса, включая приватные. Для этого используется ключевое слово inner. Экземпляр внутреннего класса всегда связан с экземпляром внешнего класса.
class Outer {
private val outerParameter = 1
inner class Inner {
fun printSomething() {
// Доступ к члену внешнего класса
println("Outer parameter is $outerParameter")
println("Hello from inner class")
}
}
}
Основные различия:
| Особенность | Вложенный класс (Nested) | Внутренний класс (Inner) |
|---|---|---|
| Доступ к внешнему | Нет | Да (через экземпляр внешнего класса) |
| Связь с экземпляром | Не связан с экземпляром внешнего класса | Связан с экземпляром внешнего класса |
| Объявление | Не требует ключевого слова (по умолчанию nested) | Требует ключевое слово inner |
| Использование | Может быть статическим аналогом (в контексте Java) | Не может быть статическим |
| Создание экземпляра | Outer.Nested() |
Outer().Inner() |