Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !

Des classes dans des classes

Les classes internes

Une classe interne (inner class) est une classe qui est définie à l’intérieur d’une autre classe.

Au niveau de la syntaxe, écrire une classe interne est extrêmement simple puisqu’il convient d’ajouter le mot-clé inner au moment de la déclaration de la classe.

Quel est l’intérêt des classes internes ?

L’intérêt des classes internes est triple. Bien que ce ne doit pas être ce qui motive leur écriture, elles permettent de déclarer plusieurs classes au sein du même fichier et donc de limiter la multiplication des fichiers au sein des programmes informatiques. Elles permettent de modéliser une hiérarchie entre les classes. En effet, on écrit une classe interne lorsqu’il y a un lien très étroit entre la classe interne et la classe englobante. Elles ont accès aux attributs et aux fonctions de la classe englobante.

Soit une classe Computer permettant de modéliser un ordinateur. Plusieurs attributs permettent de renseigner ses caractéristiques, par exemple la RAM, l’espace disque, le nom de la carte graphique, etc.

class Computer(val ramSize: Int, val hardDiskSize: Int, val 
graphicCardName: String) 

Nous souhaitons ajouter une carte mère à l’ordinateur. Cette carte mère peut être représentée par une classe...

Les classes imbriquées

Une classe imbriquée (nested class) est une classe qui est définie à l’intérieur d’une autre classe.

Quelle est la différence avec une classe interne ?

L’une et l’autre permettent de modéliser un lien très étroit avec la classe englobante. Il existe cependant une différence fondamentale entre une classe imbriquée et une classe interne : si la classe interne peut accéder aux attributs et fonctions de la classe englobante, ce n’est pas le cas de la classe imbriquée.

Du point de vue de la syntaxe, il n’y a aucun mot-clé spécifique à connaître : une classe imbriquée est tout simplement une classe écrite dans une autre classe.

Revenons à la modélisation de l’ordinateur. Nous avons besoin d’une classe modélisant un ordinateur et contenant deux attributs, à savoir une carte graphique et un disque dur ; d’une première classe imbriquée modélisant une carte graphique et contenant elle aussi deux attributs, à savoir la marque de la carte graphique et le modèle ; et une seconde classe imbriquée modélisant un disque dur et contenant deux attributs, à savoir sa marque et sa capacité.

class Computer(val graphicCard: GraphicCard, val hardDisk: HardDisk) 
{ ...

Les classes scellées

1. Qu’est-ce qu’une classe scellée ?

À l’instar des classes abstraites, une classe scéllée permet de modéliser une hiérarchie de classes. Une classe scellée est cependant un peu plus restrictive qu’une classe abstraite. En effet, si n’importe quelle classe peut hériter d’une classe abstraite, seules les classes définies dans le même fichier que la classe scellée peuvent en hériter.

En d’autres termes, les classes filles doivent être écrites dans le même fichier que la classe scellée. Nous pouvons, au choix, écrire ces classes uniquement dans le même fichier ou aller plus loin et écrire des classes imbriquées.

Si l’on essaie d’étendre d’une classe scellée en dehors du fichier dans lequel celle-ci est déclarée, le programme ne compilera malheureusement pas.

2. Écrire une classe scellée

Écrire une classe scellée est très simple puisqu’il suffit de reprendre la syntaxe d’une classe classique et d’ajouter devant le mot-clé sealed.

Soit une classe scellée Animal qui possède un attribut name permettant de stocker le nom de l’animal :

sealed class Animal(val name: String) 

Écrivons quelques classes supplémentaires héritant...

En résumé

  • Il est possible d’écrire une classe dans une autre classe grâce aux classes internes et aux classes imbriquées.

  • L’utilisation de classes internes et imbriquées permet de modéliser une hiérarchie entre les classes et exprimer un lien très étroit entre la classe englobée et la classe englobante.

  • L’utilisation de classes internes et imbriquées permet de limiter la multiplication des fichiers au sein des programmes informatiques.

  • Une classe interne peut accéder aux attributs et méthodes de la classe englobante, ce qui n’est pas le cas d’une classe imbriquée.

  • Une classe scellée est une classe abstraite que l’on ne peut pas instancier et dont toutes les classes enfants doivent obligatoirement être déclarées dans le même fichier.

  • Une classe scellée est définie grâce au mot-clé sealed.

  • Une classe scellée peut contenir zéro, une ou plusieurs méthodes abstraites.

  • Une classe scellée est compatible avec le concept de covariance.