Kotlin ugnezdeni in notranji razred

V tem članku se boste s pomočjo primerov naučili delati z ugnezdenimi in notranjimi razredi.

Kotlin gnezdeni razred

Podobno kot Java tudi Kotlin omogoča, da definirate razred znotraj drugega razreda, imenovanega ugnezdeni razred.

 razred Zunanji (… razred gnezdeni (…))

Ker je ugnezdeni razred član njegovega zaprtega razreda Outer, lahko z .notacijo dostopate do Nestedrazreda in njegovih članov.

Primer: Kotlin ugnezdeni razred

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

Ko zaženete program, bo rezultat:

Znotraj gnezdenega razreda. Klic funkcije iz vgnezdenega razreda.

Za uporabnike Java

Vgnezden razred v Kotlinu je podoben statičnemu ugnezdenemu razredu v Javi.

V Javi, ko razred prijavite v drugem razredu, privzeto postane notranji razred. Vendar v Kotlinu morate uporabiti notranji modifikator, da ustvarite notranji razred, o katerem bomo razpravljali naprej.

Kotlin Notranji razred

Vgnezdeni razredi v Kotlinu nimajo dostopa do zunanjega primerka razreda. Na primer

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

Zgornja koda se ne bo prevedla, ker smo poskušali dostopati do lastnosti foo zunanjega razreda znotraj razreda Nested.

Če želite rešiti to težavo, morate ugnezdeni razred označiti z notranjim, da ustvarite notranji razred. Notranji razredi imajo sklic na zunanji razred in lahko dostopajo do članov zunanjega razreda.

Primer: Kotlinov notranji razred

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

Ko zaženete program, bo rezultat:

Uporaba zunanjega predmeta: Zunaj ugnezdeni razred. Uporaba notranjega predmeta: Zunaj ugnezdeni razred.

Priporočeno branje: Anonimni notranji razred

Zanimive Članki...