Exercice 1
1. Affichage de la méthode principale main
Lors de l'exécution, le constructeur de la classe C est appelé. Voici l'ordre des
constructeurs :
1. Le constructeur de A est exécuté : "constructeur de A".
2. Le constructeur de B(int x) appelle this(), qui invoque le constructeur sans
paramètre de B : "constructeur de B".
3. Ensuite, le constructeur B(int x) continue : "autre constructeur de B".
4. Enfin, le constructeur de C : "constructeur de C".
constructeur de A
constructeur de B
autre constructeur de B
constructeur de C
2. Suppression de this() dans la classe B
Avec cette suppression, le constructeur B(int x) n'appelle plus le constructeur sans
paramètre de B. Voici l'ordre des constructeurs :
1. Le constructeur de A est exécuté : "constructeur de A".
2. Le constructeur B(int x) est exécuté directement : "autre constructeur de B".
3. Le constructeur de C est exécuté : "constructeur de C".
constructeur de A
autre constructeur de B
constructeur de C
3. Suppression de super(3) dans la classe C
Avec cette suppression, le constructeur sans paramètre de B est appelé par défaut.
Voici l'ordre des constructeurs :
1. Le constructeur de A est exécuté : "constructeur de A".
2. Le constructeur sans paramètre de B est exécuté : "constructeur de B".
3. Le constructeur de C est exécuté : "constructeur de C".
constructeur de A
constructeur de B
constructeur de C
4. Suppression du constructeur sans paramètre de la classe B
Le constructeur de C tente d'appeler super(3) dans la classe B. Comme le constructeur
sans paramètre n'existe pas dans B, une erreur de compilation survient.
Erreur de compilation
Exercice 2
Cas et résultats :
1. B b = new B(); b.e();
o Appelle la méthode e de la classe B.
o Affichage : "method e de B".
2. A ab = new B(); ab.e();
o Appelle la méthode e de la classe B (polymorphisme).
o Affichage : "method e de B".
3. B ba = new A(); ba.e();
o Erreur de compilation : impossible d'assigner une instance de A à une
référence de type B.
o Résultat : Erreur de compilation.
4. B b = new B(); b.e("zz");
o Appelle la méthode e(String m) de la classe B.
o Affichage : "method2 e de B zz".
5. A a = new A(); B b = (B)a;
o Erreur d'exécution : impossible de caster une instance de A en B.
o Résultat : Erreur d'exécution.
6. A a = new B(); ((B)a).e("zz");
o Caste l'instance de B en B et appelle e(String m).
o Affichage : "method2 e de B zz".
Exercice 3
Modélisation objet :
1. Classes et relations :
o Classe Vehicule (classe mère).
▪ Attributs : numéro, marque, dateAchat, prixAchat, prixCourant.
▪ Méthodes : calculerPrixCourant(), afficher().
o Classe Voiture (hérite de Vehicule).
▪ Attributs : nombrePortes, puissance, kilometrage.
▪ Méthodes : surcharge de calculerPrixCourant().
o Classe Avion (hérite de Vehicule).
▪ Attributs : typeMoteur, heuresDeVol.
▪ Méthodes : surcharge de calculerPrixCourant().
2. Code Java :
class Vehicule {
protected String marque;
protected String dateAchat;
protected double prixAchat;
protected double prixCourant;
public Vehicule(String marque, String dateAchat, double prixAchat) {
[Link] = marque;
[Link] = dateAchat;
[Link] = prixAchat;
public void calculerPrixCourant() {
// Implémentation générale
public void afficher() {
[Link]("Marque : " + marque);
[Link]("Prix courant : " + prixCourant);
class Voiture extends Vehicule {
private int nombrePortes;
private int puissance;
private int kilometrage;
public Voiture(String marque, String dateAchat, double prixAchat, int nombrePortes,
int puissance, int kilometrage) {
super(marque, dateAchat, prixAchat);
[Link] = nombrePortes;
[Link] = puissance;
[Link] = kilometrage;
@Override
public void calculerPrixCourant() {
[Link]();
// Calcul spécifique pour les voitures
}
class Avion extends Vehicule {
private String typeMoteur;
private int heuresDeVol;
public Avion(String marque, String dateAchat, double prixAchat, String typeMoteur, int
heuresDeVol) {
super(marque, dateAchat, prixAchat);
[Link] = typeMoteur;
[Link] = heuresDeVol;
@Override
public void calculerPrixCourant() {
[Link]();
// Calcul spécifique pour les avions
Exercice 4
1. Affichage lors de l'exécution :
• Film f1 :
o Titre : Le cas Richard Jewell
o Réalisateur : Clint Eastwood
o Durée : 209
o Film récent.
• Film f2 :
o Titre : Antoinette dans les Cévennes
o Réalisateur : Carole Vignal
o Durée : 127
o Film récent.
• Serie s1 :
o Pas d'affichage correct (défaut dans toString).
2. Décision de la récence :
Le programme vérifie si l'année du film est supérieure ou égale à 2019 via la méthode
estRecent().
3. Amélioration des affichages :
Modifier la méthode toString pour gérer toutes les sous-classes correctement.