Kotlin verschachtelt und innere Klasse

In diesem Artikel lernen Sie anhand von Beispielen, mit verschachtelten und inneren Klassen zu arbeiten.

Verschachtelte Kotlin-Klasse

Ähnlich wie in Java können Sie in Kotlin eine Klasse innerhalb einer anderen Klasse definieren, die als verschachtelte Klasse bezeichnet wird.

 Klasse Outer (… Klasse Nested (…))

Da die verschachtelte Klasse Mitglied der einschließenden Klasse Outer ist, können Sie die .Notation verwenden, um auf die NestedKlasse und ihre Mitglieder zuzugreifen .

Beispiel: Verschachtelte Kotlin-Klasse

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

Innerhalb der verschachtelten Klasse. Funktionsaufruf aus der verschachtelten Klasse.

Für Java-Benutzer

Die verschachtelte Klasse in Kotlin ähnelt der statischen verschachtelten Klasse in Java.

Wenn Sie in Java eine Klasse in einer anderen Klasse deklarieren, wird sie standardmäßig zu einer inneren Klasse. In Kotlin müssen Sie jedoch den inneren Modifikator verwenden, um eine innere Klasse zu erstellen, die wir als nächstes diskutieren werden.

Kotlin Innere Klasse

Die verschachtelten Klassen in Kotlin haben keinen Zugriff auf die äußere Klasseninstanz. Beispielsweise,

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

Der obige Code wird nicht kompiliert, da wir versucht haben, von der verschachtelten Klasse aus auf die foo-Eigenschaft der Outer-Klasse zuzugreifen.

Um dieses Problem zu lösen, müssen Sie die verschachtelte Klasse mit inner markieren, um eine innere Klasse zu erstellen. Innere Klassen enthalten einen Verweis auf eine äußere Klasse und können auf Mitglieder der äußeren Klasse zugreifen.

Beispiel: 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())") )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

Äußeres Objekt verwenden: Außerhalb der verschachtelten Klasse. Verwenden des inneren Objekts: Außerhalb der verschachtelten Klasse.

Literaturempfehlung: Anonyme innere Klasse

Interessante Beiträge...