Class abstract : classe abstraite + méthode abstraite : modificateur de classe
Introduction aux modificateurs de class de type abstract
• Une classe abstraite ne peut instancier un objet. Souvent ce sont les sous classes qui ont la possibilité d’instancier un objet, à partir d’information héritée de la super classe abstraite.
• Au moins une méthode est abstraite, la classe devient d’office abstraite même si le mot clef « abstract », n’est pas mentionné dans la déclaration de la classe
• Une classe abstraite doit servir de super classe aux sous-classes qu’elle contient
• Si une sous classe contient une classe abstraite, elle devient elle-même une classe abstraite (que l’on peut imaginer comme une sous classe abstraite).
• Une sous classe dérivée d’une classe abstraite ne doit pas forcement définir toute les méthodes héritées de sa classe abstraite parente. Une classe dérivée d’une classe parent abstraite peut elle-même être abstraite.
• Pour qu’une sous classe héritant d’une classe abstraite puisse être instanciée, cette sous classe doit redéfinir le corps de toute les méthodes abstraites de sa classe parent. Il s’agit d’une implémentation propre à chacune des méthodes.
• Une classe déclarée static, ou private ne peut être logiquement déclarée abstraite, étant donnée qu’elle ne peuvent être redéfinie par une éventuelle sous classe.
Les classes abstraite servent en gros à classer les classes et les méthodes contenues dans ces sous classes.
Exemple classique de classe abstraite qui permet de mieux comprendre le concept java de classe abstraites.
Imaginons que nous ayons besoin de créer un programme qui effectue des traitements différents selon qu’il reçoit en paramètre des objets soit de type « homme », soit de type « femme ». On pourrait alors créer une superclasse abstraite nommée « humain ». A partir de cette super classe abstraite de type « humain », on va définir deux sous-classes : la première nommé classe « homme », la deuxième sous classe nommée « femme ». A partir de ces sous classes, il devient intéressant de créer des objets de type homme ou femme, afin de donner ces objets instanciés en paramètre du programme. On peut aisément comprendre que l’on peut certes instancier de type « homme », ou de type femme, mais pas un humain. Il manquerait des informations telles que le genre sexuel de l’objet, le prénom (doit-il être un prénom féminin ou masculin ?) et une infinité d’autres informations manquantes qui nous empêche de créer un objet pratique utilisable. Déclarer la classe humain « abstract » est un choix du programmeur java qui le fait dans le but de mieux concevoir son programme, mieux ranger et ordonner les multiples classes qui composent sont programme. Ainsi, il devient évident dans notre exemple, que le programme ne peut pas (car cela ne lui est d’aucune utilité pratique) instancier des objets de type « humain ».
Autre exemple expliqué de l’utilisation d’une classe abstraite. On peut créer une classe drapeau qui, par default, n’est ni levé ni baissé. Les méthodes introduites dans la classe abstraite pourraient définir les cals dans lesquels le drapeau serait levé ou baissé. Des sous classes utilisant le mot extends (pour hériter des caractéristiques de la super classe) pourrait elle par la suite instancier un objet de type drapeau en définissant les caractéristiques propres à chaque objets instanciés de type drapeau.
Une classe peut être déclarée abstraite même si elle n’est pas composée par des méthodes abstraites. Son rôle est de servir de super classe et les sous classes qui hériteront de cette classe abstraite se chargeront d’implémenter l’héritage de cette classe.