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