Найти в Дзене
Android Dolgo.polo Dev

Kotlin — вложенные и внутренние классы

Кроме наследования, есть два типа отношений между классами:
• вложенные (nested)
class A {
class B
}
создать экземпляр класса B: A.B()
зачем: выделить часть функционала класса A, используемый только с классом A, в отдельный класс B
• внутренние (inner)
class A {
inner class B
}
создать экземпляр класса B: A().B()
зачем: аналогично вложенному, но при этом функционал, выделенный в класс B, зависит от полей класса A
Отличия:
вложенный класс не связан с экземпляром внешнего — они создаются отдельно
внутренние классы содержат ссылку на внешний класс, то есть во внутренний класс неявно передается ссылка на внешний класс
у внутреннего класса есть доступ к public, private и protected полям внешнего класса
Возможная опасность:
передавая куда-то внутренний класс, нужно помнить, что он содержит ссылку на внешний. это может привести к утечки памяти
....
есть примеры из Android SDK, библиотек или личного опыта, когда использование вложенных или внутренних классов было дейс

Кроме наследования, есть два типа отношений между классами:

• вложенные (nested)

class A {
class B
}


создать экземпляр класса B: A.B()

зачем: выделить часть функционала класса A, используемый только с классом A, в отдельный класс B

• внутренние (inner)

class A {
inner class B
}


создать экземпляр класса B: A().B()

зачем: аналогично вложенному, но при этом функционал, выделенный в класс B, зависит от полей класса A


Отличия:

вложенный класс не связан с экземпляром внешнего — они создаются отдельно

внутренние классы содержат ссылку на внешний класс, то есть во внутренний класс неявно передается ссылка на внешний класс

у внутреннего класса есть доступ к public, private и protected полям внешнего класса


Возможная опасность:

передавая куда-то внутренний класс, нужно помнить, что он содержит ссылку на внешний. это может привести к утечки памяти

....

есть примеры из Android SDK, библиотек или личного опыта, когда использование вложенных или внутренних классов было действительно оправдано?