Skip Navigation Links
Accueil
Java Standard EditionExpand Java Standard Edition
Java EE 5Expand Java EE 5
Visual Basic .Net 2005Expand Visual Basic .Net 2005
Visual C++ .Net 2005Expand Visual C++ .Net 2005
Visual C# .Net 2005Expand Visual C# .Net 2005
Cours ASP .Net 2.0Expand Cours ASP .Net 2.0
PostgresqlExpand Postgresql
LinuxExpand Linux
Visual Studio 2008Expand Visual Studio 2008
ASP 3.0 ClassiqueExpand ASP 3.0 Classique
Cours Javascript - DOM - DHTMLExpand Cours Javascript - DOM - DHTML
Cours AjaxExpand Cours Ajax
VBAExpand VBA
AssembleurExpand Assembleur
PerlExpand Perl
MembresExpand Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Accueil > Java Standard Edition > Les classes abstraites
____________________________________________________________________________________________________
Connexion

Les classes abstraites

Sommaire :

I) Définition
II) Exemple
III)Remarques sur les classes abstraites
IV)Code source de l'exemple
   IV-1)Animal.java
   IV-2)Chien.java
   IV-3)Chat.java
   IV-4)Main.java
V)Téléchargement du projet d'exemple

I) Définition

Une classe abstraite est une classe dont au moins une méthode n'est pas implémentée. On indique qu'une classe est abstraite grâce au modificateur "abstract" au moment de déclarer le nom de la classe.
Le nom "abstrait" pour désigner une telle classe est donc bien choisi, car la classe n'est pas complètement écrite.

Pour les méthodes qui ne sont pas implémentées, on met uniquement la signature de la méthode( suivie du point virgule comme en C), précédée de "abstract".

Une classe abstraite ne peut pas être instanciée, normal car tout son code n'est pas écrit.

Une classe qui hérite d'une classe abstraite est instanciable uniquement si elle implémente toutes les méthodes abstraites. Dans le cas contraire, cette nouvelle classe est aussi abtraite.

Notation UML d'une classe abtraite: son nom est en italiques.

La classe concrète hérite simplement avec "extends" comme d'habitude. Et elle implémente les méthodes concrètes tout simplement comme on écrit n'importe quelle méthode java.

Dans la pratique, on peut se rendre compte qu'on a besoin d'une classe abstraite, quand on a besoin de deux classes dont le contenu est identique, mais qui ne diffèrent seulement que par une ou quelques méthodes( qui sont les mêmes, mais implémentées différemment). Les classes concrètes peuvent très bien avoir des attributs qui leur sont propres. La classe abstraite ne contiendra alors que les attributs communs.

II) Exemple

L'exemple courant pour les classes abstraites est celui des figures géométriques.

Prenons l'exemple d'une classe abstraite animal, et de deux classes concrètes: Chien et Chat.

L'exemple parle de lui même, et est commenté.
Il est composé de 4 fichiers: Animal.java, Chat.java, Chien.java

- En exécutant notre programme en ligne de commande, on s'aperçoit que les accents sont mals affichés( des autres caractères est affiché à la place des caractères accentués). Ceci est dû à l'utilisation de system.out.println .
En exécutant à partir d'eclipse( clic droit dans la classe Main depuis Eclipse, puis run as java application), le phénomène ne se produit pas.

III)Remarques sur les classes abstraites

III-1) Exemple 1

Dans cette exemple, maClAbstr doit implémenter la seule méthode de java.lang.Comparable, la méthode compareTo(). Comme maClAbstr n'implémente pas cette méthode, le compilateur en déduit que c'est une méthode abstraite de notre classe! Donc il n'y a pas d'erreur de compilation disant qu'on est forcé d'implémenter compareTo().

Si on crée une classe qui hérite de maClAbstr, elle doit implémenter forcément la méthode compareTo, sous peine d'avoir le message classique des méthodes abstraites non implémentées(qui est d'ailleurs le même message d'erreur que pour les méthodes d'interface non implémentées).

III-2) Exemple 2

Ici, on a écrit une classe abstraite avec aucune méthode abstraite: le compilateur l'accepte. L'intérêt est qu'on ne pourra pas instancier d'objets de cette classe. Cela a par conséquent un sens de qualifier cette classe de abstraite, car elle ne sera jamais instanciée.

IV)Code source de l'exemple

IV-1)Animal.java
IV-2)Chien.java
IV-3)Chat.java
IV-4)Main.java

IV-1) Animal.java

IV-2)Chien.java

IV-3)Chat.java

IV-4)Main.java

V)Téléchargement du projet d'exemple

Projet d'exemple, V1.1

RETOUR HAUT