Chapitre 5
Chapitre 5
Chapitre 5
Chapitre 1 Introduction
Chapitre 2 Objets et Classes
Chapitre 3 Encapsulation et Surcharge
Chapitre 4 Héritage et Polymorphisme
Chapitre 5 Classes abstraites et Interfaces
Cha6
Chapitre Les collections
pitre
57
Chapitre Les exceptions
I. Classes abstraites
II. Les interfaces
III. Classes abstraites VS Interfaces
public abstract void g(int) ; //Erreur : nom argument fictif est obligatoire
• Une classe dérivée d’une classe abstraite n’est pas obligée de redéfinir
toutes les méthodes abstraites, elle peut ne redéfinir aucune, mais elle
reste abstraite tant qu’il y a encore des méthodes abstraites non
implémentées.
• Une classe dérivée d’une classe non abstraite peut être déclarée abstraite.
Exemple:
public class Rectangle extends Forme
abstract public class Forme { double largeur, hauteur;
{double posX, posY; public Rectangle()
void deplacer(double x,double y) { { posX=0; posY=0; largeur=0; hauteur=0; }
posX=x; posY=y; } public Rectangle7(double x, double y, double la,
void afficher() { double lo) {
System.out.println("position : (" posX=x; posY=y;
+posX+","+posY+")"); } largeur=la; hauteur=lo; }
abstract double surface() ; double surface() { return largeur * hauteur; }
} void affiche () {
System.out.println (« C’est un rectangle L=» +
largeur + « \t H=»+ hauteur) ;
➢Cette classe est abstraite car Super.affiche() ; }}
ses méthodes surface et
perimetre sont abstraites, ➢La classe Rectangle hérite de la classe abstraite.
➢Une telle classe n'est pas ➢Elle définie toutes ses méthodes, en particulier
instanciable celles abstraites héritées.
18/09/2023 POO 2eme SI 8
Classes abstraites
• Exemple
interface I1 {…..}
interface I2 {…..}
class A implements I1 {……}
class B extends A implements I1, I2 {…..}
• Exemple
public class Rectangle implements Polygone {
public double Longueur;
public interface Polygone { public double largeur;
public double périmètre(); public Rectangle(double L,double l){
public int nombreCotes(); } this.Longueur=L; this.largeur=l; }
public double périmètre(){
return 2*(this.Longueur+this.largeur); }
public int nombreCotes(){ return 4; }
public void afficher(){
System.out.println("La périmètre du rectangle est : "+
this.périmètre()); }}
Class Test {
public static void main(String[] args) {
Polygone R1=new Rectangle(7,4);
Rectangle R2=new Rectangle(9,3);
R1.afficher(); R2.afficher(); } }
18/09/2023 POO 2eme SI 12
Classes abstraites Vs. Interfaces
• Classe abstraite
– une classe abstraite peut posséder des attributs
– une classe abstraite peut avoir des méthodes possédant
une implantation
– par contre, on est obligé d’utiliser une notion d’héritage
classique
• Interface
– on peut faire de l’héritage multiple entre interfaces
– Une interface ne possède ni attributs (sauf les constantes) ni
des méthodes implantées
→ Le choix dépend du problème !
1. Ecrire la classe Figure, contenant l’attribut privé nom de la figure et les méthodes
suivantes :
– un constructeur avec argument
– - getNom()
– setNom(String) –
– une méthode abstraite float calculAire ()
– une méthode abstraite void afficher ()
2. Ecrire la classe Rectangle, contenant les attributs longueur et largeur. Elle dispose des
méthodes suivantes :
― un constructeur par défaut
― un constructeur avec deux arguments
― une méthode calculAire () –
― une méthode afficher ()
3. Ecrire une classe TestFigure qui permet d’instancier un rectangle, de l’afficher et de
calculer son aire.