Kotlin nestet og indre klasse

I denne artikkelen vil du lære å jobbe med nestede og indre klasser ved hjelp av eksempler.

Kotlin nestet klasse

Lignende som Java, lar Kotlin deg definere en klasse i en annen klasse kjent som nestet klasse.

 klasse Ytre (… klasse nestet (…))

Siden nestet klasse er medlem av den omsluttende klassen Ytre, kan du bruke .notasjon for å få tilgang til Nestedklassen og dens medlemmer.

Eksempel: Kotlin nestet klasse

 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()) )

Når du kjører programmet, vil utdataene være:

Inne i nestet klasse. Funksjonssamtale fra innsiden Nestet klasse.

For Java-brukere

Den nestede klassen i Kotlin ligner på den statiske nestede klassen i Java.

Når du erklærer en klasse i Java i Java, blir den som standard en indre klasse i Java. Men i Kotlin må du bruke indre modifikator for å lage en indre klasse som vi vil diskutere neste.

Kotlin indre klasse

De nestede klassene i Kotlin har ikke tilgang til den ytre klasseinstansen. For eksempel,

 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()) )

Ovennevnte kode vil ikke kompileres fordi vi prøvde å få tilgang til foo-egenskapen til ytre klasse fra inne i nestet klasse.

For å løse dette problemet, må du merke den nestede klassen med indre for å skape en indre klasse. Indre klasser har en referanse til en ytre klasse, og har tilgang til ytre klassemedlemmer.

Eksempel: Kotlin indre klasse

 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())") )

Når du kjører programmet, vil utdataene være:

Bruke ytre objekt: Utenfor nestet klasse. Bruke indre gjenstand: Utenfor nestet klasse.

Anbefalt lesing: Anonym indre klasse

Interessante artikler...