Accueil
Java Standard Edition
Java EE 5
Visual Basic .Net 2005
Visual C++ .Net 2005
Visual C# .Net 2005
Cours ASP .Net 2.0
Postgresql
Linux
Visual Studio 2008
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Cours Ajax
VBA
Assembleur
Perl
Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Exécution d'un programme
Les archives Jar
Les classes abstraites
Les interfaces
Les tableaux
La généricité
Les énumérations
Les classes internes
Classes anonymes et internes locales
Les threads: généralités
Les threads(2): synchronisation
E/S(1):InputStream et OutputStream
E/S(2):FileInputStream et FileOutputStream
E/S(3):Reader et Writer
E/S(4):FilterInputStream et FilterOutputStream
E/S(5):Les filtres d'octets: PrintStream
E/S(6):Les filtres d'octets: DataInputStream et DataOutputStream
E/S(7):Les filtres d'octets: BufferedInputStream et BufferedOutputStream
E/S(8):Flux de caractères: PrintWriter
E/S(9):Flux de caractères: FilterReader et FilterWriter
E/S(10):Flux de caractères: InputStreamReader, OutputStreamWriter, StreamDecoder, StreamEncoder
E/S(11):Flux de caractères: BufferedReader et BufferedWriter
E/S(12):Flux de caractères: FileReader et FileWriter
La classe String (java.lang)
Les collections: L'interface Collection(java.lang)
Les collections(2): L'interface List(java.util)
Les collections(3): AbstractCollection(java.util)
Les collections(4): AbstractList(java.util)
La bibliothèque Swing en Java
Les bases de données en Java
JDBC ( Java Database Connectivity )
Les interfaces graphiques
Les fichiers de configuration en Java
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS LINUX
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS WINDOWS
Les applications Web en java
Les filtres Java (javax.servlet.Filter)
I Généralités
I.1 Le formulaire principal
I.2 Les objets créés par Visual
I.3 Les variables références
I.4 Le garbage collector
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Applications winforms
I.2 Applications MFC
I.3 Objets managés ou pas
I.4 Objets non managés
I.5 Objets managés - handle
I.6 Le top-level ^
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Puissant et Accessible
I.2 Créer ses classes
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
III Les services Windows
IV Le .net remoting
V Communication Tcp avec TcpClient et TcpListener
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Un EDI formidable
I.2 Inclure C# ou VB
I.3 L'objet Response
I.4 Les évènements
II ASP .net et les bdd
II.1 Essayer plusieurs fois la requête
I 2.1 Fichiers distincts
I.2.2 Avec la balise script
I.2.3 Inclure réellement
I.2.4 Avec Response.Write()
I.3.1 La méthode Response.Redirect()
I.4.1 Résoudre problème post
Installation Postgre Linux
Cours Postgresql
Le Shell Unix( Linux, Ubuntu)
Les scripts C-Shell
Programmation système Unix
Reseau Linux
Les iptables
Windows Presentation Foundation(WPF)
Le Framework 3.0
Windows Workflow Foundation(WF)
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Chat Ajax
VBA Excel 2003
Assembleur
Perl
Inscription
Liste membres
Livre d'or
Forum
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
public abstract class maClAbstr implements java.lang.Comparable<maClAbstr>{ public maClAbstr() { } public int somme( int pA, int pB) { return pA + pB; } }
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
public abstract class maClAbstr{ public maClAbstr() { } public int somme( int pA, int pB) { return pA + pB; } }
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
package animal; /** * * @author sabri Koffler * @version 1.0 * 2/10/2008 * Exemple d'utilisation des classes abstraites * en Java * */ public abstract class Animal { /** * Age de l'animal, en années */ protected int age; /** * Poids de l'animal, en kilos */ protected int poids; /** * Taille de l'animal, en centimetres */ protected int taille; /** * Nombre de dents de l'animal */ protected int nbDents; //Constructeurs /** * Constructeur */ public Animal(int pAge) { System.out.println("J'effectue les initialisations propres à Animal"); if (pAge>=150) { System.out.println("J'ai l'impression que je suis un animal exceptionnel de longévité"); } } //Accesseurs public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getPoids() { return poids; } public void setPoids(int poids) { this.poids = poids; } public int getTaille() { return taille; } public void setTaille(int taille) { this.taille = taille; } public int getNbDents() { return nbDents; } public void setNbDents(int nbDents) { this.nbDents = nbDents; } //Les méthodes spécifiques: abstraites public abstract void manger(); // Les méthodes communes public void parler() { System.out.println("Je ne parle pas encore, je ne suis qu'un animal."); } }
IV-2)Chien.java
package animal; /** * * @author sabri Koffler * Exemple d'utilisation des classes abstraites * en Java * */ public class Chien extends Animal { //Attributs propres à Chien /** * Catégorie de chien( dangereux, etc) */ private int categorieChien; //Constructeurs /** * Constructeur * Pas oublier qu'un constructeur ne retourne pas de valeur. * On appelle le constructeur de Animal d'abord: ça va de soi. */ public Chien(int pAge) { super(pAge); if (this.getPoids()>=80) { System.out.println("Je suis un gros chien!"); } } //Accesseurs public int getCategorieChien() { return categorieChien; } public void setCategorieChien(int categorieChien) { this.categorieChien = categorieChien; } //Méthodes abstraites implémentées public void manger() { if (this.getNbDents()<=5) { System.out.println("J'ai du mal avec les os, pas facile pour un chien"); } else { System.out.println("Je suis en train de manger"); } } }
IV-3)Chat.java
package animal; /** * * @author sabri Koffler * Exemple d'utilisation des classes abstraites * en Java * */ public class Chat extends Animal { //Attributs propres à Chat /** * Longueur des moustaches, en cm */ int lgMoustaches; //Constructeurs /** * Constructeur. */ public Chat(int pAge) { super(pAge); if (this.getLgMoustaches()>=100) { System.out.println("J'ai des sacrés moustaches!"); } } //Accesseurs public int getLgMoustaches() { return lgMoustaches; } public void setLgMoustaches(int lgMoustaches) { this.lgMoustaches = lgMoustaches; } //Méthodes abstraites implémentées public void manger() { if (this.getNbDents()<=2) { System.out.println("Je mange moins de viande, mais je peux laper le lait sans problème"); } else { System.out.println("Je suis en train de manger doucement"); } } }
IV-4)Main.java
package main; import animal.Chat; import animal.Chien; /** * Classe crée uniquement pour la méthode main * @author sabri * */ public class Main { /** * @param args */ public static void main(String[] args) { System.out.println("Le chien"); Chien monChien; monChien = new Chien(170); monChien.setNbDents(4); monChien.setPoids(160); monChien.manger(); monChien.parler(); System.out.println(); System.out.println("Le chat"); Chat monChat = new Chat(210); monChat.setNbDents(1); monChat.setLgMoustaches(110); monChat.manger(); monChat.parler(); } }
V)Téléchargement du projet d'exemple
Projet d'exemple, V1.1
RETOUR HAUT