Exercice Java Corrigé sur POO – Polymorphism
Avec des exercices corrigés en Java, vous pratiquerez divers concepts du langage de programmation Java. Vous commencerez par des exercices Java de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
Exercice 1:
Écrivez un programme Java pour créer une classe de base Animal avec une méthode appelée faireBruit(). Créez deux sous-classes Chat et Chien. Surchargez la méthode faireBruit() dans chaque sous-classe pour produire un bruit spécifique à chaque animal.
// Déclarer la classe Animal class Animal { // Méthode pour afficher le bruit que fait l'animal public void faireBruit() { System.out.println("L'animal émet un bruit"); } } // Déclarez la classe Chat qui hérite la classe Animal class Chat extends Animal { // Surcharger la méthode faireBruit pour fournir une // implémentation spécifique pour Chat @Override public void faireBruit() { System.out.println("Le chat meow"); } } // Déclarez la classe Chien qui hérite la classe Animal class Chien extends Animal { // Surcharger la méthode faireBruit pour fournir une // implémentation spécifique pour Chien @Override public void faireBruit() { System.out.println("Le chien aboie"); } } // Déclarez la classe Main public class Main { // Méthode principale : point d'entrée du programme public static void main(String[] args) { // Créer une instance de Animal Animal animal = new Animal(); // Créer une instance de Chat Chat chat = new Chat(); // Créer une instance de Chien Chien chien = new Chien(); // Appeler la méthode faireBruit sur l'instance Animal animal.faireBruit(); // Sortie: L'animal émet un bruit // Appeler la méthode faireBruit sur l'instance Chat chat.faireBruit(); // Sortie: Le chat meow // Appeler la méthode faireBruit sur l'instance Chien chien.faireBruit(); // Sortie: Le chien aboie } }
Sortie:
L'animal émet un bruit Le chat meow Le chien aboie
Explication:
Le polymorphisme en Java permet à une méthode d’avoir plusieurs formes. Il permet d’utiliser une même méthode ou une même interface pour différentes classes.
Exercice 2:
Écrire un programme Java pour créer une classe Vehicule avec une méthode appelée augmenterVitesse(). Créez deux sous-classes Voiture et Bicyclette. Surchargez la méthode augmenterVitesse() dans chaque sous-classe pour augmenter la vitesse du véhicule différemment.
// Déclarer la classe Vehicule class Vehicle { // Champ privé pour stocker la vitesse du véhicule private int vitesse; // Méthode pour augmenter la vitesse du véhicule de 10 public void augmenterVitesse() { vitesse += 10; } // Méthode pour récupérer la vitesse actuelle du véhicule public int getVitesse() { return vitesse; } } // Déclarez la classe Voiture qui hérite la classe Vehicule class Voiture extends Vehicle { // Surcharger la méthode augmenterVitesse de la classe Vehicle @Override public void augmenterVitesse() { // Appeler la méthode augmenterVitesse de la classe mère super.augmenterVitesse(); // Afficher un message indiquant que la vitesse de la voiture // a augmenté System.out.println("\nVitesse de la voiture augmentée de 30 unités."); } } // Déclarez la classe Bicyclette qui hérite la classe Vehicule class Bicyclette extends Vehicle { // Surcharger la méthode augmenterVitesse de la classe Vehicle @Override public void augmenterVitesse() { // Appeler la méthode augmenterVitesse de la classe mère super.augmenterVitesse(); // Afficher un message indiquant que la vitesse de la voiture // a augmenté System.out.println("Vitesse de la bicyclette augmentée de 15 unités."); } } // Déclarez la classe Main public class Main { // Méthode principale: le point d'entrée du programme public static void main(String[] args) { // Créer une instance de la classe Voiture Voiture voiture = new Voiture(); // Créer une instance de la classe Bicyclette Bicyclette bicyclette = new Bicyclette(); // Afficher la vitesse initiale de la voiture System.out.println("Vitesse initiale de la voiture: "+ voiture.getVitesse()); // Afficher la vitesse initiale de la bicyclette System.out.println("Vitesse initiale de la bicyclette: "+ bicyclette.getVitesse()); // Accélérer la voiture voiture.augmenterVitesse(); // Accélérer la bicyclette bicyclette.augmenterVitesse(); // Affichez la vitesse de la voiture après avoir accéléré System.out.println("\nVitesse de la voiture après avoir accéléré: " + voiture.getVitesse()); // Affichez la vitesse de la bicyclette après avoir accéléré System.out.println("Vitesse de la bicyclette après avoir accéléré: " + bicyclette.getVitesse()); } }
Sortie:
Vitesse initiale de la voiture: 0 Vitesse initiale de la bicyclette: 0 Vitesse de la voiture augmentée de 30 unités. Vitesse de la bicyclette augmentée de 15 unités. Vitesse de la voiture après avoir accéléré: 10 Vitesse de la bicyclette après avoir accéléré: 10
Exercice 3:
Écrivez un programme Java pour créer une classe de base Forme avec une méthode appelée calculerSurface(). Créez trois sous-classes: Cercle, Rectangle et Triangle. Surchargez la méthode calculerSurface() dans chaque sous-classe pour calculer et renvoyer la surface de la forme.
// Déclarer la classe Forme class Forme { // Méthode de calcul de la surface de la forme // L'implémentation par défaut renvoie 0 public double calculerSurface() { return 0; } } // Définir la classe Cercle comme une sous-classe de Forme class Cercle extends Forme { // Déclarer une variable pour le rayon private double rayon; // Constructeur pour la classe Cercle qui prend le rayon comme // paramètre public Cercle(double rayon) { // Affecter le paramètre rayon à la variable rayon this.rayon = rayon; } // Surcharger la méthode calculerSurface de la classe Forme @Override public double calculerSurface() { // Calculer et renvoyer la surface du cercle à l'aide de la // formule πr² return Math.PI * rayon * rayon; } } // Définir la classe Rectangle comme une sous-classe de Forme class Rectangle extends Forme { // Déclarer les variables largeur et hauteur private double largeur; private double hauteur; // Constructeur pour la classe Rectangle qui prend la largeur et // la hauteur comme paramètres public Rectangle(double largeur, double hauteur) { this.largeur = largeur; this.hauteur = hauteur; } // Surcharger la méthode calculerSurface de la classe Forme @Override public double calculerSurface() { // Calculer et renvoyer la surface du rectangle en utilisant // la formule largeur * hauteur return largeur * hauteur; } } // Définir la classe Triangle comme une sous-classe de Forme class Triangle extends Forme { // Déclarer les variables base et hauteur private double base; private double hauteur; // Constructeur pour la classe Triangle qui prend la base et la // hauteur comme paramètres public Triangle(double base, double hauteur) { this.base = base; this.hauteur = hauteur; } // Surcharger la méthode calculerSurface de la classe Forme @Override public double calculerSurface() { // Calculer et renvoyer l'aire du triangle en utilisant la // formule 0,5 * base * hauteur return 0.5 * base * hauteur; } } // Définir la classe Main public class Main { // Méthode principale qui sert de point d'entrée à l'application public static void main(String[] args) { // Créer un objet Cercle avec un rayon de 5 Cercle cercle = new Cercle(5); // Afficher la surface de l'objet Cercle System.out.println("Surface du cercle: " + cercle.calculerSurface()); // Créer un objet Rectangle avec une largeur de 15 et une // hauteur de 32 Rectangle rectangle = new Rectangle(15, 32); // Afficher la surface de l'objet Rectangle System.out.println("\nSurface du rectangle: "+ rectangle.calculerSurface()); // Créer un objet Triangle de base 6 et de hauteur 8 Triangle triangle = new Triangle(6, 8); // Afficher la surface de l'objet Triangle System.out.println("\nSurface du Triangle: "+ triangle.calculerSurface()); } }
Sortie:
Surface du cercle: 78.53981633974483 Surface du rectangle: 480.0 Surface du Triangle: 24.0
Exercice 4:
Écrivez un programme Java pour créer une classe « Employee » avec une méthode appelée calculerSalaire(). Créez deux sous-classes Directeur et Programmeur. Dans chaque sous-classe, surchargez la méthode calculerSalaire() pour calculer et renvoyer le salaire en fonction de leurs rôles spécifiques.
// Définir la classe Employee class Employee { // Déclarer des variables (nom et role) private String nom; private String role; // Constructeur pour la classe Employee qui prend le nom et le // role comme paramètres public Employee(String nom, String role) { this.nom = nom; this.role = role; } // Méthode pour récupérer le nom de l'employé public String getNom() { // Renvoyer le nom de l'employé return nom; } // Méthode pour récupérer le role de l'employé public String getRole() { // Renvoyer le role de l'employé return role; } // Méthode pour calculer le salaire de l'employé public double calculerSalaire() { // Renvoyer 0.0 comme salaire par défaut return 0.0; } } // Définir la classe Directeur comme une sous-classe de Employee class Directeur extends Employee { // Déclarer les variables baseSalaire et bonus private double baseSalaire; private double bonus; // Constructeur de la classe Directeur qui prend comme paramètres // le nom, le salaire de base et le bonus. public Directeur(String nom, double baseSalaire, double bonus) { // Appeler le constructeur de la super-classe Employee avec // le nom et le rôle Directeur super(nom, "Directeur"); this.baseSalaire = baseSalaire; this.bonus = bonus; } // Surcharger la méthode calculerSalaire de la classe Employee @Override public double calculerSalaire() { // Calculer et renvoyer le salaire du directeur en // additionnant le salaire de base et le bonus. return baseSalaire + bonus; } } // Définir la classe Programmeur comme une sous-classe de Employee class Programmeur extends Employee { // Déclarer les variables baseSalaire et paiementHeuresSuppl private double baseSalaire; private double paiementHeuresSuppl; // Constructeur de la classe Programmeur qui prend comme // paramètres le nom, le salaire de base et la rémunération // des heures supplémentaires. public Programmeur(String nom, double baseSalaire, double paiementHeuresSuppl) { // Appeler le constructeur de la super-classe Employee avec // le nom et le rôle Programmeur super(nom, "Programmeur"); this.baseSalaire = baseSalaire; this.paiementHeuresSuppl = paiementHeuresSuppl; } // Remplacer la méthode calculerSalaire de la classe Employee @Override public double calculerSalaire() { // Calculer et renvoyer le salaire du programmeur en // additionnant baseSalaire et paiementHeuresSuppl. return baseSalaire + paiementHeuresSuppl; } } // Définir la classe Main public class Main { // Méthode principale qui sert de point d'entrée à l'application public static void main(String[] args) { // Créer un objet Directeur Employee emp1 = new Directeur("Alex Bio", 8500.0, 1200.0); // Créer un objet Programmeur Employee emp2 = new Programmeur("Emily Chio", 6000.0, 400.0); // Afficher le nom, le rôle et le salaire de l'objet // Directeur System.out.println("Directeur: "+ emp1.getNom() +"\nRole: "+ emp1.getRole() +"\nSalaire: "+ emp1.calculerSalaire()+" €"); // Afficher le nom, le rôle et le salaire de l'objet // Programmeur System.out.println("\nProgrammeur: "+ emp2.getNom() +"\nRole: "+ emp2.getRole() +"\nSalaire: "+ emp2.calculerSalaire()+" €"); } }
Sortie:
Directeur: Alex Bio Role: Directeur Salaire: 9700.0 € Programmeur: Emily Chio Role: Programmeur Salaire: 6400.0 €
Exercice 5:
Écrivez un programme Java pour créer une classe de base Sports avec une méthode appelée play(). Créez trois sous-classes : Football, Basketball et Rugby. Surchargez la méthode play() dans chaque sous-classe pour faire jouer une instruction spécifique à chaque sport.
// Définir la classe Sports class Sports { public void play() { System.out.println("Faire du sport...\n"); } } // Définir la classe Football comme une sous-classe de Sports class Football extends Sports { // Surcharger la méthode play de la classe Sports @Override public void play() { // Print "Playing football..." to the console System.out.println("Faire du football..."); } } // Définir la classe Basketball comme une sous-classe de Sports class Basketball extends Sports { // Surcharger la méthode play de la classe Sports @Override public void play() { System.out.println("Faire du basketball..."); } } // Définir la classe Rugby comme une sous-classe de Sports class Rugby extends Sports { // Surcharger la méthode play de la classe Sports @Override public void play() { System.out.println("Faire du rugby..."); } } // Déclarer la classe Main public class Main { public static void main(String[] args) { // Créer une instance de la classe Sports Sports sports = new Sports(); // Créer une instance de la classe Football Football football = new Football(); // Créer une instance de la classe Basketball Basketball basketball = new Basketball(); // Créer une instance de la classe Rugby Rugby rugby = new Rugby(); // Appeler la méthode play sur l'instance Sports sports.play(); // Appeler la méthode play sur l'instance Sports Football football.play(); // Appeler la méthode play sur l'instance Sports Basketball basketball.play(); // Appeler la méthode play sur l'instance Sports Rugby rugby.play(); } }
Sortie:
Faire du sport... Faire du football... Faire du basketball... Faire du rugby...
Exercice 6:
Écrivez un programme Java pour créer une classe de base CompteBancaire avec des méthodes deposer() et retirer(). Créez deux sous-classes CompteEpargne et CompteCheque. Surchargez la méthode retirer() dans chaque sous-classe pour imposer des limites et des frais de retrait différents.
// Définir une classe nommée CompteBancaire class CompteBancaire { // Déclarer une variable privée de type double appelée solde private double solde; // Définir un constructeur qui prend un double initialBalance en // paramètre public CompteBancaire(double initialBalance) { // Assigner le paramètre initialBalance à la variable // d'instance solde this.solde = initialBalance; } // Définir une méthode pour obtenir le solde actuel public double getSolde() { // Retourner le solde actuel return solde; } // Définir une méthode pour déposer un montant sur le solde public void deposer(double montant) { // Ajouter le montant au solde actuel solde += montant; } // Définir une méthode pour retirer un montant du solde public void retirer(double montant) { // Vérifier si le montant à retirer est inférieur ou égal au // solde actuel if (montant <= solde) { // Soustraire le montant du solde actuel solde -= montant; } else { // Afficher "Fonds insuffisants." dans la console si le // solde est insuffisant System.out.println("Fonds insuffisants."); } } } // Définir une classe nommée CompteEpargne qui hérite CompteBancaire class CompteEpargne extends CompteBancaire { // Déclarer une variable privée de type double appelée limit private double limit; // Définir un constructeur qui prend un double initialBalance et // un double limit en paramètres public CompteEpargne(double initialBalance, double limit) { // Appeler le constructeur de la superclasse CompteBancaire // avec initialBalance super(initialBalance); // Assigner le paramètre limit à la variable d'instance limit this.limit = limit; } // Redéfinir la méthode retirer de la classe CompteBancaire @Override public void retirer(double montant) { // Vérifier si le montant à retirer est inférieur ou égal à // la limite de retrait if (montant <= limit) { // Appeler la méthode retirer de la superclasse // CompteBancaire avec le montant super.retirer(montant); } else { // Afficher "Limite de retrait dépassée." dans la console // si le montant dépasse la limite de retrait System.out.println("Limite de retrait dépassée."); } } } // Définir une classe nommée CompteCheque qui hérite CompteBancaire class CompteCheque extends CompteBancaire { // Déclarer une variable privée de type double appelée // fraisDepassement private double fraisDepassement; // Définir un constructeur qui prend un double soldeInitial et un // double fraisDepassement en paramètres public CompteCheque(double soldeInitial, double fraisDepassement) { // Appeler le constructeur de la superclasse CompteBancaire // avec soldeInitial super(soldeInitial); // Assigner le paramètre fraisDepassement à la variable // d'instance fraisDepassement this.fraisDepassement = fraisDepassement; } // Redéfinir la méthode retirer de la classe CompteBancaire @Override public void retirer(double montant) { // Vérifier si le montant à retirer est inférieur ou égal au // solde actuel if (montant <= getSolde()) { // Appeler la méthode retirer de la superclasse // CompteBancaire avec le montant super.retirer(montant); } else { // Afficher "Frais de découvert appliqués." dans la // console si le montant dépasse le solde actuel System.out.println("Frais de découvert appliqués."); // Appeler la méthode retirer de la superclasse // CompteBancaire avec le montant plus les frais de // découvert super.retirer(montant + fraisDepassement); } } } // Définir la classe principale public class Main { // Méthode principale, point d'entrée du programme public static void main(String[] args) { // Créer un objet CompteEpargne avec un solde de 3000 et une // limite de 750 CompteBancaire ce = new CompteEpargne(3000, 750); // Créer un objet CompteCheque avec un solde de 2000 et une // limite de 100 CompteBancaire cc = new CompteCheque(2000, 100); // Retirer 400 du compte d'épargne retirerDuCompte(ce, 400); // Retirer 150 du compte courant retirerDuCompte(cc, 150); // Afficher le solde actuel du compte d'épargne System.out.println("Solde du compte d'épargne : "+ ce.getSolde()); // Afficher le solde actuel du compte courant System.out.println("Solde du compte courant : "+ cc.getSolde()); } // Méthode pour retirer un montant spécifié d'un compte bancaire // donné public static void retirerDuCompte(CompteBancaire compte, double montant) { // Appeler la méthode retirer sur le compte avec le montant // spécifié compte.retirer(montant); } }
Sortie:
Solde du compte d'épargne : 2600.0 Solde du compte courant : 1850.0
Éditeur de code Java: Testez votre code en ligne!
Testez vos connaissances – QCM Java corrigé – Partie 1QCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus
- Exercice Java Corrigé pour Débutant | Partie 1
- Exercice Java Corrigé pour Débutant | Partie 2
- Exercice Java Corrigé pour Débutant | Partie 3
- Exercice Java Corrigé pour Débutant | Partie 4
- Exercice Java Corrigé pour Débutant | Partie 5
- Exercice Java Corrigé pour Débutant | Partie 6
- Exercice Java Corrigé pour Débutant | Partie 7
- Exercice Java Corrigé pour Débutant | Partie 8
- Exercice Java Corrigé pour Débutant | Partie 9
- Exercice Java Corrigé pour Débutant | Partie 10
- Exercice Java Corrigé – Méthodes Récursives
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 1
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 2
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 3
- Exercice Java Corrigé sur les Collections – Arraylist – Partie 4
- Exercice Java Corrigé sur les Collections – LinkedList – Partie 1
- Exercice Java Corrigé sur les Collections – LinkedList – Partie 2
- Exercice Java Corrigé sur les Collections – LinkedList – Partie 3
- Exercice Java Corrigé sur les Collections – HashSet
- Exercice Java Corrigé sur les Collections – TreeSet – Partie 1
- Exercice Java Corrigé sur les Collections – TreeSet – Partie 2
- Exercice Java Corrigé sur les Collections – PriorityQueue
- Exercice Java Corrigé sur les Collections – HashMap
- Exercice Java Corrigé sur les Collections – TreeMap
- Exercices corrigés Java POO – Constructeurs
- Exercices corrigés Java – Programmation Orientée Objet | Partie 1
- Exercices corrigés Java – Programmation Orientée Objet | Partie 2
- Exercices corrigés Java – Programmation Orientée Objet | Partie 3
- Exercices corrigés Java – Programmation Orientée Objet | Partie 4
- Exercices corrigés Java – Programmation Orientée Objet | Partie 5
- Exercices corrigés Java – Programmation Orientée Objet | Partie 6
- Exercice Java Corrigé sur POO – Polymorphism
- Exercice Java Corrigé – POO – Interfaces
- Exercice Java Corrigé – POO – Classe Abstraite
- Exercice Java Corrigé – POO – Classes Imbriquées
- Exercices corrigés Java les classes et l’héritage – Partie 1
- Exercices corrigés Java les classes et l’héritage – Partie 2
- Exercice Java Corrigé – Gestion Des Exceptions