Vnorené a vnútorné triedy Kotlin

V tomto článku sa naučíte pracovať s vnorenými a vnútornými triedami pomocou príkladov.

Vnorená trieda Kotlin

Podobne ako Java umožňuje Kotlin definovať triedu v rámci inej triedy známej ako vnorená trieda.

 trieda vonkajšia (… trieda vnorená (…))

Pretože vnorená trieda je členom jej obklopujúcej triedy Vonkajšie, môžete .na prístup k Nestedtriede a jej členom použiť notáciu .

Príklad: vnorená trieda 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()) )

Po spustení programu bude výstup:

Vo vnútri vnorenej triedy. Volanie funkcie zvnútra vnorenej triedy.

Pre používateľov Java

Vnorená trieda v Kotline je podobná statickej vnorenej triede v Jave.

Keď v Jave deklarujete triedu v inej triede, štandardne sa z nej stane vnútorná trieda. Avšak v Kotline musíte použiť vnútorný modifikátor na vytvorenie vnútornej triedy, o ktorej budeme diskutovať ďalej.

Kotlin vnútorná trieda

Vnorené triedy v Kotline nemajú prístup k inštancii vonkajšej triedy. Napríklad,

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

Vyššie uvedený kód sa nebude kompilovať, pretože sme sa pokúsili získať prístup k vlastnosti foo triedy Outer zvnútra vnorenej triedy.

Ak chcete vyriešiť tento problém, musíte vnorenú triedu označiť ako vnútornú, aby ste vytvorili vnútornú triedu. Vnútorné triedy nesú odkaz na vonkajšiu triedu a majú prístup k členom vonkajšej triedy.

Príklad: 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())") )

Po spustení programu bude výstup:

Použitie vonkajšieho objektu: Mimo vnorenej triedy. Použitie vnútorného objektu: Mimo vnorenej triedy.

Odporúčame prečítať: Anonymná vnútorná trieda

Zaujímavé články...