Выбор ответа Middle Классы, data и sealed обновлено
inner class и утечка памяти
Вопрос
Чем inner class отличается от вложенного класса без модификатора?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: inner class хранит неявную ссылку на внешний объект. В Kotlin вложенный класс по умолчанию статический, ссылки на внешний объект у него нет. inner добавляет ссылку this@Outer, как нестатический внутренний класс в Java.
Варианты ответа
inner classне видит приватные члены внешнего классаinner classхранит неявную ссылку на внешний объектправильный ответ- Вложенный класс без модификатора хранит ссылку на внешний объект
- Ничем, это синонимы: оба компилируются в статический класс
Разбор
В Kotlin вложенный класс по умолчанию статический, ссылки на внешний объект у него нет. inner добавляет ссылку this@Outer, как нестатический внутренний класс в Java. Если такой объект живёт дольше внешнего (колбэк, поток, статическое поле), он держит внешний объект в памяти, классическая утечка Activity. Видимость приватных членов внешнего класса есть у обоих вариантов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.