Ebben a cikkben megtanulja, hogyan dolgozzon beágyazott és belső osztályokkal példák segítségével.
Kotlin beágyazott osztály
Hasonlóan a Java-hoz, a Kotlin lehetővé teszi egy osztály definiálását egy másik osztályban, amelyet beágyazott osztálynak neveznek.
osztály Külső (… osztály beágyazott (…))
Mivel a Nested osztály az Outer záróosztályának tagja, a .
jelöléssel használhatja az Nested
osztályt és annak tagjait.
Példa: Kotlin beágyazott osztálya
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()) )
A program futtatásakor a kimenet a következő lesz:
Belül Beágyazott osztály. Funkcióhívás a Beágyazott osztály belsejéből.
Java felhasználók számára
A Kotlin beágyazott osztálya hasonló a Java statikus beágyazott osztályához.
A Java-ban, amikor egy osztályt deklarál egy másik osztályon belül, alapértelmezés szerint belső osztály lesz. Kotlinban azonban belső módosítót kell használnia egy belső osztály létrehozásához, amelyet a továbbiakban megvitatunk.
Kotlin belső osztály
A kotlini beágyazott osztályok nem férhetnek hozzá a külső osztálypéldányhoz. Például,
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()) )
A fenti kód nem áll össze, mert a Nested osztály belsejéből próbáltunk hozzáférni az Outer osztály foo tulajdonságához.
A probléma megoldásához meg kell jelölnie a beágyazott osztályt belsővel, hogy létrehozzon egy belső osztályt. A belső osztályok hivatkoznak egy külső osztályra, és hozzáférhetnek a külső tagokhoz.
Példa: Kotlin belső osztály
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())") )
A program futtatásakor a kimenet a következő lesz:
Külső objektum használata: Kívül beágyazott osztály. Belső objektum használata: Kívül beágyazott osztály.
Ajánlott irodalom: Névtelen belső osztály