English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Artikel werden Sie durch Beispiele lernen, wie Sie geschachtelte und innere Klassen verwenden.
Wie in Java ermöglicht Kotlin Ihnen, in einer anderen Klasse, die als geschachtelte Klasse bezeichnet wird, eine Klasse zu definieren
class Outer { ... .. ... class Nested { ... .. ... } }
Da die geschachtelte Klasse ein externes (Outer) Mitglied der umschließenden Klasse ist, können Sie das Punkt-Symbol verwenden, um auf die geschachtelte Klasse und ihre Mitglieder zuzugreifen.
class Outer { val a = "In der äußeren Klasse." class Nested { val b = "Innerhalb der geschachtelten Klasse." fun callMe() = "Funktion von innen aufgerufen." } } fun main(args: Array<String>) { //Mitglied der geschachtelten Klasse aufrufen println(Outer.Nested().b) //Objekt der geschachtelten Klasse erstellen val nested = Outer.Nested() println(nested.callMe()) }
Beim Ausführen des Programms wird ausgegeben:
Innerhalb der geschachtelten Klasse Funktion aufrufen von innen
Für Java-Nutzer
Geschachtelte Klassen in Kotlin ähneln den statischen geschachtelten Klassen in Java.
In Java wird eine in einer anderen Klasse deklarierte Klasse standardmäßig zu einer inneren Klasse. In Kotlin müssen Sie jedoch die Modifizierer 'inner' verwenden, um eine innere Klasse zu erstellen, was wir weiter unten besprechen werden.
In Kotlin haben geschachtelte Klassen kein Recht, auf Instanzen der externen Klasse zuzugreifen. Zum Beispiel
class Outer { val foo = "Außerhalb der geschachtelten Klasse." class Nested { //Fehler! Der Zugriff auf die Mitglieder der externen Klasse ist nicht möglich. fun callMe() = foo } } fun main(args: Array<String>) { val outer = Outer() println(outer.Nested().callMe()) }
Der obige Code kann nicht kompiliert werden, weil wir versucht haben, auf das Attribut 'foo' der externen Klasse von innen auf die innere Klasse zuzugreifen.
Um dieses Problem zu lösen, müssen Sie eine innere Klasse mit dem Marker 'inner' verwenden, um eine innere Klasse zu erstellen. Eine innere Klasse trägt eine Referenz auf den externen Klassen und kann auf die Mitglieder der externen Klasse zugreifen.
class Outer { val a = "In der äußeren Klasse." inner class Inner { fun callMe() = a } } fun main(args: Array<String>) { val outer = Outer() println("Verwenden Sie externe Objekte: ${outer.Inner().callMe()}") val inner = Outer().Inner() println("Verwenden Sie interne Objekte: ${inner.callMe()}") }
Beim Ausführen des Programms wird ausgegeben:
Verwenden Sie externe Objekte: In der äußeren Klasse. Verwenden Sie interne Objekte: In der äußeren Klasse.