Polymorphisme : règles On déclare un objet de type parent On le définit parmi un de ses types dérivés Une méthode polymorphe doit Être déclarée dans la classe parent Redéfinit dans les classes enfants
Méthode abstraite Une méthode abstraite n'a pas de définition : Elle est déclarée dans une classe parent Elle n'a pas de corps, se déclare comme en c Une classe possédant une ou plusieurs méthodes abstraites devient obligatoirement une classe abstraite Une méthode abstraite est obligatoirement définie dans les classes enfants public abstract double calculerAire();
Classe abstraite Une classe abstraite est précédée du mot clé abstract Ne peut pas être instanciée Doit obligatoirement être dérivée (avoir au moins une classe enfant) public abstract class Forme{...}
Classes et méthodes abstraites Exemple : on souhaite créer une hiérarchie de classes qui décrive des formes géométriques à deux dimensions Ainsi la classe "mère" serait la classe Forme Elle pourrait avoir des classes filles telles que Cercle, Rectangle, etc.
Classes et méthodes abstraites Sachant que toutes les formes possèdent les propriétés périmètre et surface, il est judicieux de placer les méthodes définissant ces propriétés (perimetre() et surface() ) dans la classe qui est à la racine de l'arborescence ( Forme)
Classes et méthodes abstraites
Classes et méthodes abstraites La classe Forme ne peut pas implémenter ces deux méthodes, car on ne peut pas calculer le périmètre et la surface sans connaître le détail de la forme
Classes et méthodes abstraites Afin d'être certain que les méthodes surface() et perimetre() seront implémentées dans les classes fille de la classe Forme, on déclare ses deux classes comme étant abstraites.
Classes et méthodes abstraites Codez les classes Forme, Rectangle et Cercle. Peut-on déclarer des objets de type Forme ? Peut-on instancier des Forme ?