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 Nested
klassen 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