0% ont trouvé ce document utile (0 vote)
8 vues4 pages

Chap7 Java

Le chapitre 7 aborde l'abstraction en Java à travers les classes abstraites et les interfaces, permettant de définir des contrats sans implémentation complète. Les classes abstraites servent de modèles de base et obligent les classes filles à redéfinir les méthodes abstraites, tandis que les interfaces définissent des comportements communs sans lien de parenté. Depuis Java 8, les interfaces peuvent contenir des méthodes par défaut, facilitant l'évolution des contrats sans affecter les classes existantes.

Transféré par

karel Towanou
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues4 pages

Chap7 Java

Le chapitre 7 aborde l'abstraction en Java à travers les classes abstraites et les interfaces, permettant de définir des contrats sans implémentation complète. Les classes abstraites servent de modèles de base et obligent les classes filles à redéfinir les méthodes abstraites, tandis que les interfaces définissent des comportements communs sans lien de parenté. Depuis Java 8, les interfaces peuvent contenir des méthodes par défaut, facilitant l'évolution des contrats sans affecter les classes existantes.

Transféré par

karel Towanou
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Dr ZOTCHI GIOVANI – 0197991288 – [Link].

FR – CHAP7 JAVA

Après avoir vu l'héritage classique, nous allons explorer des concepts plus avancés de la
Programmation Orientée Objet : l'abstraction. L'objectif ici est de définir des "contrats" et
des modèles de base sans forcément en donner l'implémentation complète.

Chapitre 7 : Classes Abstraites et Interfaces


L'abstraction permet de se concentrer sur ce que l'objet doit faire, plutôt que sur comment il le
fait. En Java, nous avons deux outils principaux pour cela : les classes abstraites et les
interfaces.

7.1 Les Classes Abstraites


Une classe abstraite est une classe incomplète. Elle sert de modèle de base strict pour ses
classes filles, mais elle ne peut pas être instanciée directement (on ne peut pas faire de new
dessus).

7.1.1 Déclaration et particularités

Pour rendre une classe abstraite, on utilise le mot-clé abstract.

 Elle peut contenir des attributs normaux, des constructeurs et des méthodes classiques
avec du code.
 Elle peut aussi contenir des méthodes abstraites (sans code).

7.1.2 Les méthodes abstraites

Une méthode abstraite est une méthode déclarée avec le mot-clé abstract et qui n'a pas de
corps (pas d'accolades {}). Elle se termine par un point-virgule.

Toute classe fille qui hérite d'une classe abstraite a l'obligation absolue de redéfinir
(coder) ces méthodes abstraites, sinon la classe fille devra elle-même être déclarée abstraite.

Java
// On ne peut pas faire : Animal a = new Animal();
public abstract class Animal {
protected String nom;

public Animal(String nom) {


[Link] = nom;
}

// Méthode classique (commune à tous les animaux)


public void dormir() {
[Link](nom + " dort : Zzzzz...");
}

// Méthode abstraite (chaque animal crie différemment)


// Pas de corps {} !
public abstract void crier();
}

Implémentation dans la classe fille :

1
Dr ZOTCHI GIOVANI – 0197991288 – [Link] – CHAP7 JAVA

Java
public class Chien extends Animal {

public Chien(String nom) {


super(nom);
}

// Obligation de fournir le code de crier() !


@Override
public void crier() {
[Link](nom + " aboie : Wouf Wouf !");
}
}

💡 Astuce Eclipse : Si vous créez la classe Chien extends Animal, Eclipse soulignera
Chien en rouge. Utilisez le raccourci Ctrl + 1 et cliquez sur "Add unimplemented methods".
Eclipse écrira automatiquement la structure de la méthode crier() pour vous !

7.2 Les Interfaces


Une interface pousse le concept d'abstraction à son paroxysme. C'est un contrat pur.

Historiquement (avant Java 8), une interface ne pouvait contenir que des signatures de
méthodes (des méthodes abstraites) et des constantes (public static final).

7.2.1 Création et implémentation

On utilise le mot-clé interface au lieu de class. Pour qu'une classe utilise une interface, on
n'utilise pas extends, mais le mot-clé implements.

Java
// Définition du contrat
public interface Volant {
// Les méthodes dans une interface sont implicitement "public abstract"
void decoller();
void voler();
void atterrir();
}

Lorsqu'une classe "implémente" une interface, elle signe un contrat : elle s'engage à fournir le
code de toutes les méthodes de l'interface.

Java
public class Oiseau implements Volant {
@Override
public void decoller() {
[Link]("L'oiseau bat des ailes et décolle.");
}

@Override
public void voler() {
[Link]("L'oiseau plane dans les airs.");
}

@Override

2
Dr ZOTCHI GIOVANI – 0197991288 – [Link] – CHAP7 JAVA

public void atterrir() {


[Link]("L'oiseau se pose sur une branche.");
}
}

7.2.2 L'héritage multiple en Java

Java interdit l'héritage multiple de classes (une classe ne peut pas faire extends ClasseA,
ClasseB).

Cependant, Java autorise l'implémentation multiple d'interfaces ! C'est leur force majeure.

Java
// Une classe peut hériter d'UNE seule classe, mais implémenter PLUSIEURS
interfaces
public class Hydravion extends Avion implements Volant, Flottant {
// Doit contenir le code des méthodes de Volant ET de Flottant
}

7.3 Classe Abstraite vs Interface : Lequel choisir ?


C'est une question classique en entretien d'embauche. Voici comment trancher :

Caractéristique Classe Abstraite Interface (interface)


(abstract class)

Relation de sens Définit ce qu'un objet Définit ce qu'un objet SAIT FAIRE (Un
EST (Un Chien est un Avion est Volant).
Animal).

Héritage Héritage simple Implémentation multiple possible


uniquement (extends). (implements A, B).

Attributs Peut avoir tous types Ne contient que des constantes (public
d'attributs (variables static final).
d'instance, privées, etc.).

Méthodes avec Peut avoir des méthodes Par défaut, uniquement des signatures
code classiques avec du code. (depuis Java 8, on peut utiliser des méthodes
default avec du code, mais c'est un cas
particulier).

3
Dr ZOTCHI GIOVANI – 0197991288 – [Link] – CHAP7 JAVA

En résumé :

 Utilisez une classe abstraite si vous avez du code commun à partager entre des
classes étroitement liées (ex: partager l'attribut nom et la méthode dormir() entre tous
les animaux).
 Utilisez une interface pour définir un comportement commun à des classes qui n'ont
rien à voir entre elles (ex: un Oiseau et un Avion n'ont pas la même classe mère, mais
les deux savent Volant).

7.4 L'évolution des Interfaces (Java 8+)


Depuis Java 8, les interfaces ont évolué pour permettre d'ajouter du code sans casser les
classes existantes qui implémentent déjà le contrat. On utilise le mot-clé default.

Java
public interface Volant {
void voler(); // Méthode abstraite classique

// Méthode par défaut (avec un corps !)


default void allumerFeuxSignalisation() {
[Link]("Feux allumés par défaut.");
}
}

Si une classe implémente Volant, elle héritera automatiquement de


allumerFeuxSignalisation() sans avoir besoin de la recoder (bien qu'elle puisse la
redéfinir si elle le souhaite).

Vous aimerez peut-être aussi