Dans cet article, vous apprendrez à travailler avec des classes imbriquées et internes à l'aide d'exemples.
Classe imbriquée Kotlin
Similaire à Java, Kotlin vous permet de définir une classe dans une autre classe connue sous le nom de classe imbriquée.
classe externe (… classe imbriquée (…))
Étant donné que la classe imbriquée est membre de sa classe englobante Outer, vous pouvez utiliser la .
notation pour accéder à la Nested
classe et à ses membres.
Exemple: classe imbriquée Kotlin
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()) )
Lorsque vous exécutez le programme, la sortie sera:
À l'intérieur de la classe imbriquée. Appel de fonction depuis l'intérieur de la classe imbriquée.
Pour les utilisateurs Java
La classe imbriquée dans Kotlin est similaire à la classe imbriquée statique en Java.
En Java, lorsque vous déclarez une classe dans une autre classe, elle devient une classe interne par défaut. Cependant, dans Kotlin, vous devez utiliser un modificateur interne pour créer une classe interne dont nous parlerons ensuite.
Classe intérieure de Kotlin
Les classes imbriquées dans Kotlin n'ont pas accès à l'instance de classe externe. Par exemple,
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()) )
Le code ci-dessus ne se compilera pas car nous avons essayé d'accéder à la propriété foo de la classe Outer depuis la classe Nested.
Afin de résoudre ce problème, vous devez marquer la classe imbriquée avec inner pour créer une classe interne. Les classes internes portent une référence à une classe externe et peuvent accéder aux membres de classe externes.
Exemple: 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())") )
Lorsque vous exécutez le programme, la sortie sera:
Utilisation d'un objet externe: classe imbriquée en dehors. Utilisation de l'objet interne: classe imbriquée extérieure.
Lecture recommandée: classe intérieure anonyme