programmation Java (école d'ingénieur) · Chapitre 9 · Exercice de TD
Le coût d'un trajet
Héritage et polymorphisme · niveau 2
Énoncé
Une classe Moyen (de transport) déclare String nom() et double cout(double km). Écrire trois sous-classes : Velo (coût nul), Auto (consommation en litres aux 100 km et prix du litre) et Train (prix au kilomètre). Afficher, pour un trajet de km, le coût avec une auto consommant L/100 km à euro le litre, et avec un train à euro le kilomètre. Combien de lignes de la boucle d'affichage faut-il modifier pour ajouter une trottinette ?
Corrigé
class Moyen {
String nom() { return "?"; }
double cout(double km) { return 0; }
}
class Velo extends Moyen {
@Override String nom() { return "vélo"; }
}
class Auto extends Moyen {
private final double litresAuxCent, prixLitre;
Auto(double l, double p) { litresAuxCent = l; prixLitre = p; }
@Override String nom() { return "auto"; }
@Override double cout(double km) { return km * litresAuxCent / 100 * prixLitre; }
}
class Train extends Moyen {
private final double prixKm;
Train(double p) { prixKm = p; }
@Override String nom() { return "train"; }
@Override double cout(double km) { return km * prixKm; }
}
Moyen[] flotte = { new Velo(), new Auto(6.5, 1.85), new Train(0.12) };
double km = 120;
for (Moyen m : flotte)
System.out.printf("%-6s : %6.2f euros%n", m.nom(), m.cout(km));
vélo : 0.00 euros
auto : 14.43 euros
train : 14.40 euros
Le vélo n'a pas besoin de redéfinir cout : la version de Moyen renvoie déjà . Pour l'auto : euros. Ajouter une trottinette demande d'écrire la classe Trottinette et de l'ajouter au tableau : aucune ligne de la boucle ne change. C'est tout l'intérêt du polymorphisme.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.