În acest articol, veți învăța să lucrați cu clase imbricate și interioare cu ajutorul exemplelor.
Clasa imbricată Kotlin
Similar cu Java, Kotlin vă permite să definiți o clasă într-o altă clasă cunoscută sub numele de clasă imbricată.
clasa exterioară (… clasă imbricată (…))
Întrucât clasa imbricată este un membru al clasei de închidere Outer, puteți utiliza .
notația pentru a accesa Nested
clasa și membrii acesteia.
Exemplu: Clasa imbricată Kotlin
class Outer ( val a = "Outside Nested class." class Nested ( val b = "Inside Nested class." fun callMe() = "Function call from inside Nested class." ) ) fun main(args: Array) ( // accessing member of Nested class println(Outer.Nested().b) // creating object of Nested class val nested = Outer.Nested() println(nested.callMe()) )
Când rulați programul, ieșirea va fi:
În clasa cuibărită. Apel de funcție din interiorul clasei imbricate.
Pentru utilizatorii Java
Clasa imbricată în Kotlin este similară clasei imbricate statice din Java.
În Java, atunci când declarați o clasă în interiorul altei clase, devine implicit o clasă interioară. Cu toate acestea, în Kotlin, trebuie să utilizați modificatorul interior pentru a crea o clasă interioară pe care o vom discuta în continuare.
Clasa interioară Kotlin
Clasele imbricate din Kotlin nu au acces la instanța de clasă externă. De exemplu,
class Outer ( val foo = "Outside Nested class." class Nested ( // Error! cannot access member of outer class. fun callMe() = foo ) ) fun main(args: Array) ( val outer = Outer() println(outer.Nested().callMe()) )
Codul de mai sus nu se va compila deoarece am încercat să accesăm proprietatea foo a clasei Outer din interiorul clasei Nested.
Pentru a rezolva această problemă, trebuie să marcați clasa imbricată cu interior pentru a crea o clasă interioară. Clasele interioare poartă o referință la o clasă exterioară și pot accesa membrii clasei externe.
Exemplu: Clasa interioară Kotlin
class Outer ( val a = "Outside Nested class." inner class Inner ( fun callMe() = a ) ) fun main(args: Array) ( val outer = Outer() println("Using outer object: $(outer.Inner().callMe())") val inner = Outer().Inner() println("Using inner object: $(inner.callMe())") )
Când rulați programul, ieșirea va fi:
Se folosește obiectul exterior: Clasa cuplată în afara. Utilizarea obiectului interior: În afara clasei imbricate.
Lectură recomandată: Clasă interioară anonimă