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 Nested
tří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