Les classes internes dans kotlin


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


Laisser un commentaire

Résoudre : *
7 ⁄ 7 =


%d