Kotlin imbricat și clasa interioară

Î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 Nestedclasa ș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ă

Articole interesante...