Vnořená a vnitřní třída Kotlin

V tomto článku se naučíte pracovat s vnořenými a vnitřními třídami pomocí příkladů.

Vnořená třída Kotlin

Podobně jako Java umožňuje Kotlin definovat třídu v rámci jiné třídy známé jako vnořená třída.

 třída Vnější (… třída vnořená (…))

Vzhledem k tomu, že vnořená třída je členem její obklopující třídy Outer, můžete .pro přístup ke Nestedtřídě a jejím členům použít notaci .

Příklad: Kotlin vnořená třída

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

Když spustíte program, výstup bude:

Uvnitř vnořené třídy. Volání funkce z uvnitř vnořené třídy.

Pro uživatele Java

Vnořená třída v Kotlin je podobná statické vnořené třídě v Javě.

Když v Javě deklarujete třídu uvnitř jiné třídy, ve výchozím nastavení se stane vnitřní třídou. V Kotlinu však musíte použít vnitřní modifikátor k vytvoření vnitřní třídy, o které budeme diskutovat dále.

Kotlin vnitřní třída

Vnořené třídy v Kotlin nemají přístup k instanci vnější třídy. Napří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()) )

Výše uvedený kód nebude kompilován, protože jsme se pokusili získat přístup k vlastnosti foo třídy Outer zevnitř vnořené třídy.

Chcete-li tento problém vyřešit, musíte vnořenou třídu označit vnitřní, abyste vytvořili vnitřní třídu. Vnitřní třídy nesou odkaz na vnější třídu a mají přístup k členům vnější třídy.

Pří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())") )

Když spustíte program, výstup bude:

Použití vnějšího objektu: Mimo vnořenou třídu. Použití vnitřního objektu: Mimo vnořenou třídu.

Doporučená literatura: Anonymous Inner Class

Zajímavé články...