Filière : Génie Informatique
Module : Programmation Orientée Objet JAVA, Semestre 5
TP3 : Les classes abstraites et les interfaces
Exercice 1 :
Quel est le résultat des codes suivants :
Code 1 Code 2
Code 3 Code 4
Exercice 2 :
Partie 1 : Classe abstraite Transport
1. Créez une classe abstraite appelée Transport contenant les attributs protégés
suivants :
Année universitaire : 2025/2026
• int id
• String nom
• double vitesseMax
2. Ajoutez un attribut statique privé compteur permettant de générer
automatiquement l’identifiant id.
3. Définissez un constructeur qui :
• Initialise nom et vitesseMax
• Affecte automatiquement un id unique
4. Déclarez les méthodes suivantes :
• public abstract double calculerCout(double distance);
• public abstract String type();
5. Ajoutez une méthode concrète :
public String description()qui retourne par exemple :
Transport [id=1, nom=Train, vitesseMax=300]
6. Ajoutez une méthode statique :
public static int getNombreTransports()qui retourne le nombre total d’objets Transport
créés.
Partie 2 : Les classes concrètes
1. Classe Bus
1. Créez une classe Bus qui hérite de Transport.
2. Ajoutez un attribut :
• int capacite
3. Implémentez :
• calculerCout(double distance)
• coût = distance × 0.5
• type() → retourne "Bus"
4. Redéfinissez description() pour inclure la capacité.
5. Créez une classe Train qui hérite de Transport.
6. Ajoutez un attribut :
• boolean grandeVitesse
7. Implémentez :
• calculerCout(double distance)
• si grande vitesse → distance × 1.2
• sinon → distance × 0.8
• type() → retourne "Train"
8. Redéfinissez description().
9. Créez une classe Avion qui hérite de Transport.
10. Ajoutez un attribut :
• double consommation
11. Implémentez :
Année universitaire : 2025/2026
• calculerCout(double distance)
• coût = distance × consommation
• type() → retourne "Avion"
12. Redéfinissez description().
Partie 3 : Polymorphisme
1. Créez une classe TestTransport contenant la méthode main.
2. Créez un tableau polymorphe :
Transport[] transports = new Transport[3];
3. Instanciez :
• un Bus
• un Train
• un Avion
4. Stockez-les dans le tableau transports.
5. Parcourez le tableau et pour chaque transport :
• Affichez sa description
• Affichez son type
• Calculez et affichez le coût pour une distance de 100 km
Partie 4 : Questions de réflexion
1. Pourquoi la classe Transport ne peut-elle pas être instanciée ?
2. Quel est l’intérêt des méthodes abstraites ?
3. En quoi le tableau Transport[] est-il polymorphe ?
4. Que se passerait-il si calculerCout() n’était pas abstraite ?
5. Quel est l’avantage du polymorphisme dans ce programme ?
Exercice 3 :
Partie 1 – Interfaces
Créez une interface Animal avec :
• une constante String ESPECE = "Inconnue";
• une méthode abstraite void crier();
• une méthode default void manger() qui affiche "L'animal mange"
• une méthode static void info() qui affiche "Info sur les animaux"
Créez une interface Domestique avec :
• une méthode abstraite void dormir();
• une méthode default void jouer() qui affiche "L'animal joue"
Créez une interface Sauvage avec :
• une méthode abstraite void chasser();
Partie 2 – Classes
Créez la classe Chien qui implémente Animal et Domestique :
• Implémentez crier() → "aboie !"
• Implémentez dormir() → "Le chien dort profondément"
Année universitaire : 2025/2026
Créez la classe Chat qui implémente Animal et Domestique :
• Implémentez crier() → "miaule !"
• Implémentez dormir() → "Le chat fait une sieste"
Créez la classe Lion qui implémente Animal et Sauvage :
• Implémentez crier() → "rugir !"
• Implémentez chasser() → "Le lion chasse une gazelle"
Partie 3 – Polymorphisme et Test
Créez une classe Parc avec un main qui :
• Crée un tableau Animal[] parc = new Animal[5];
• Remplit-le avec 2 chiens, 2 chats, 1 lion
• Parcourt le tableau et appelle :
• crier() sur tous
• manger() sur tous (utilise la default)
• dormir() sur les domestiques (avec instanceof et cast)
• chasser() sur les sauvages (avec instanceof et cast)
• Appelle la méthode static [Link]()
Année universitaire : 2025/2026