Kotlin ugniježđeni i unutarnji razred

U ovom ćete članku naučiti raditi s ugniježđenim i unutarnjim klasama uz pomoć primjera.

Kotlin ugniježđeni razred

Slično kao Java, Kotlin vam omogućuje da definirate klasu unutar druge klase poznate kao ugniježđena klasa.

 klasa Vanjska (… klasa ugniježđena (…))

Budući da je ugniježđena klasa član svoje vanjske klase Outer, možete koristiti .notaciju za pristup Nestedklasi i njezinim članovima.

Primjer: Kotlin ugniježđena klasa

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

Kada pokrenete program, izlaz će biti:

Unutar ugniježđenog razreda. Poziv funkcije iz unutar ugniježđene klase.

Za korisnike Java

Ugniježđena klasa u Kotlinu slična je statičkoj ugniježđenoj klasi u Javi.

U Javi, kada deklarirate klasu u drugoj klasi, ona prema zadanim postavkama postaje unutarnja klasa. Međutim, u Kotlinu trebate koristiti unutarnji modifikator da biste stvorili unutarnju klasu o čemu ćemo razgovarati sljedeće.

Kotlin Inner Class

Ugniježđene klase u Kotlinu nemaju pristup vanjskoj instanci klase. Na primjer,

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

Gornji kod se neće kompajlirati jer smo pokušali pristupiti foo svojstvu Outer klase iz klase Nested.

Da biste riješili ovaj problem, morate ugniježđenu klasu označiti unutarnjom da biste stvorili unutarnju klasu. Unutarnje klase nose referencu na vanjsku klasu i mogu pristupiti vanjskim članovima klase.

Primjer: Kotlin Inner Class

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

Kada pokrenete program, izlaz će biti:

Korištenje vanjskog objekta: Vanjska ugniježđena klasa. Korištenje unutarnjeg objekta: Izvan ugniježđene klase.

Preporučena literatura: Anonimni unutarnji razred

Zanimljivi članci...