Найти в Дзене
4 подписчика

​​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, библиотек или личного опыта, когда использование вложенных или внутренних классов было действительно оправдано?
​​Kotlin — вложенные и внутренние классы  Кроме наследования, есть два типа отношений между классами:  • вложенные (nested)  class A { class B }  создать экземпляр класса B: A.
Около минуты