Toutes les classes internes ne se valent pas. Certaines classes internes peuvent accéder aux membres de la classe extérieur tant dis que d’autres ne peuvent pas accéder aux membres de la classe extérieure.
Table des matières
Les classes internes
Vous pouvez définir une classe à l’intérieur d’une autre comme suit
class Maison{ class Fabrique{ fun create(): String="Je crée la maison" } }
Ensuite vous pouvez appeler la fonction create de la classe Fabrique comme suit
fun main(){ val maison =Maison.Fabrique().create() }
Vous constater que vous devez créer une une instance de la classe Fabrique avant de pouvoir appeler la fonction create.
Dans kotlin une simple classe interne ne peux pas accéder aux membres de la classe extérieure.Voir l’exemple.
class Maison{ val longueur: Int = 200 class Fabrique{ fun affiche(){ print("La taille de la maison est $longueur") //Erreur } fun create(): String="Je crée la maison" } }
Dans l’exemple précédent, le compilateur signale une erreur car nous ne pouvons pas utiliser la la variable membre longueur dans la fonction membre affiche.Dans kotlin une simple classe interne ne peux pas accéder aux membres de la classe extérieure.
Les classes internes marquées inner
Pour créer une classe interne et pouvoir accéder aux membres de la classe externe, vous devez marquer la classe intérieure avec le mot clé inner comme suit
class Maison{ val longueur: Int = 200 inner class Fabrique{ fun affiche(){ print("La taille de la maison est $longueur") //Erreur } fun create(): String="Je crée la maison" } }
A présent vous devez constater que la classe interne accède aux membres de la classe extérieure.Dans cet exemple la variable membre longueur est utilisée dans la fonction affiche de la classe interne.
En outre , vous devez aussi constater que vous devez créer une instance de la classe extérieure pour pouvoir appeler la classe interne ou les membres de la classe interne.
Voici un exemple illustratif
fun main(){ val maison =Maison().Fabrique().create() }
Les classes locales
Vous pouvez déclarer une classe à l’intérieur d’une fonction.La porté des classes déclarées dans une fonction est l’intérieur de la fonction, c’est à dire que vous ne pouvez pas accéder à la classe à l’extérieur de la fonction.
Une classe local peut accéder aux membres de la fonction qu’elle appartient
Voir l’exemple
fun affiche{ var nb =10 class Jeu{ fun teste(): Int{ nb=11 return nb } } nb =Jeu().teste() }
Vous constater bien que la classe Jeu accède à la variable membre nb.
Les classes internes anonymes
Un objet anonyme peut être utilisé pour définir une implémentation d’une interface ou d’une classe abstraite.
fun main(){ teste() } interface EventListener{ fun onEvent() } fun teste(){ val event =object : EventListener{ override fun onEvent() { print("L'évenement s'est produit") } } event.onEvent() }
Résultat: L’évenement s’est produit
Conclusion
Nous sommes à la fin de ce tutoriel dans lequel vous avez appris à créer et utiliser les classes internes.A bientôt pour un nouveau tutoriel.
Si vous souhaitez démarrer avec kotlin sur IntelliJ IDEA cliquez sur le lien précédent
Autres ressources
https://kotlinlang.org/docs/reference/nested-classes.html
Noe Joel Vigan, auteur de ce blog, est passionné par la programmation Android. Il a créé ce blog pour partager ses connaissances sur le développement d’application android. Il est Développeur Android Fullstack, ce qui lui permet de complètement mettre en place le Backend de ses applications sur Google Cloud à défaut d’utiliser FireBase.