Kotlin beágyazott és belső osztály

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 Nestedosztá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

érdekes cikkek...