Exercices corrigés Java – Programmation Orientée Objet | Partie 5
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:
Écrire un programme Java pour créer une classe appelée « Cours » avec des attributs pour le nom du cours, l’instructeur et le nombre des étoiles. Créer une classe fille « CoursEnLigne » qui ajoute des attributs pour la plate-forme et la durée. Implémentez des méthodes pour afficher les détails du cours et vérifier si le cours est éligible pour un certificat en fonction de sa durée.
Diagrame de classe:

// Définir la classe Cours
class Cours {
// Attributs pour le nom du cours, l'instructeur et le nombre des
// étoiles
private String nomCours;
private String instructeur;
private int etoiles;
// Constructeur pour initialiser l'objet Cours
public Cours(String nomCours, String instructeur, int etoiles) {
this.nomCours = nomCours;
this.instructeur = instructeur;
this.etoiles = etoiles;
}
// Méthode pour afficher les détails du cours
public void afficher() {
System.out.println("Nom du cours: " + nomCours);
System.out.println("Instructeur: " + instructeur);
System.out.println("Etoiles: " + etoiles);
}
// Méthode pour récupérer le nom du cours
public String getNomCours() {
return nomCours;
}
// Méthode pour récupérer l'instructeur
public String getInstructeur() {
return instructeur;
}
// Méthode pour récupérer le nombre des étoiles
public int getEtoiles() {
return etoiles;
}
}
// Définir la classe fille CoursEnLigne qui hérite de la classe Cours
class CoursEnLigne extends Cours {
// Attributs supplémentaires: la plate-forme et la durée
private String platforme;
private int d; // durée en heures
// Constructeur pour initialiser l'objet CoursEnLigne
public CoursEnLigne(String nomCours, String instructeur, int etoiles, String platforme, int d) {
// Appeler le constructeur de la classe mére
super(nomCours, instructeur, etoiles);
this.platforme = platforme;
this.d = d;
}
// Méthode pour afficher les détails du cours, y compris la
// plate-forme et la durée
@Override
public void afficher() {
// Appeler la méthode de la classe mére pour afficher les
// détails communs
super.afficher();
System.out.println("Platforme: "+ platforme);
System.out.println("Durée: "+ d +" heures");
}
// Méthode pour vérifier si le cours est éligible pour un
// certificat en fonction de sa durée
public boolean estEligiblePourCertificat() {
// Supposons qu'un cours soit éligible pour un certificat si
// sa durée est d'au moins 12 heures.
return d >= 12;
}
// Méthode pour récupérer la platforme
public String getPlatform() {
return platforme;
}
}
// Définir la classe Main
public class Main {
public static void main(String[] args) {
// Créer un objet Cours
Cours c1 = new Cours("Biologie", "Dr. Alex Leon", 3);
c1.afficher();
System.out.println();
// Créer un objet CoursEnLigne
CoursEnLigne c2 = new CoursEnLigne("Science", "Prof. Ali Farok", 5, "Coursera", 24);
c2.afficher();
System.out.println("Eligible pour un certificat: "+ c2.estEligiblePourCertificat());
}
}
Sortie:
Nom du cours: Biologie Instructeur: Dr. Alex Leon Etoiles: 3 Nom du cours: Science Instructeur: Prof. Ali Farok Etoiles: 5 Platforme: Coursera Durée: 24 heures Eligible pour un certificat: true
Exercice 2:
Écrivez un programme Java pour créer une classe appelée « ProduitElectronique » avec des attributs pour l’ID, le nom et le prix du produit. Implémentez des méthodes pour appliquer une remise et calculer le prix final. Créez une classe fille « Refrigerateur » qui ajoute un attribut de période de garantie et une méthode pour étendre la garantie.
Diagrame de classe:

// Définir la classe ProduitElectronique
class ProduitElectronique {
// Attributs pour l'ID, le nom et le prix du produit
private String produitID;
private String nom;
private double prix;
// Constructeur pour initialiser l'objet ProduitElectronique
public ProduitElectronique(String produitID, String nom, double prix) {
this.produitID = produitID;
this.nom = nom;
this.prix = prix;
}
// Méthode pour appliquer une réduction au prix du produit
public void appliquerRemise(double pourcentageRemise) {
// Calculer le montant de la remise
double montantRemise = prix * pourcentageRemise / 100;
// Soustraire le montant de la remise du prix initial
prix -= montantRemise;
}
// Méthode de calcul du prix final après remise
public double getPrixFinal() {
// Retourner le prix actuel qui peut avoir été réduit
return prix;
}
// Méthode pour récupérer l'ID du produit
public String getProduitID() {
return produitID;
}
// Méthode pour récupérer le nom du produit
public String getNom() {
return nom;
}
// Méthode pour récupérer le prix du produit
public double getPrix() {
return prix;
}
}
// Définir la classe fille Refrigerateur qui hérite
// ProduitElectronique
class Refrigerateur extends ProduitElectronique {
// Attribut supplémentaire pour la période de garantie
private int periodeGarantie; // en mois
// Constructeur pour initialiser l'objet Refrigerateur
public Refrigerateur(String produitID, String nom, double prix, int periodeGarantie) {
// Appeler le constructeur de la classe mére pour initialiser
// les attributs communs
super(produitID, nom, prix);
this.periodeGarantie = periodeGarantie;
}
// Méthode pour prolonger la période de garantie
public void prolongerGarantie(int additionalMonths) {
// Ajouter les mois supplémentaires à la période de garantie
// actuelle
periodeGarantie += additionalMonths;
}
// Méthode pour récupérer la période de garantie
public int getPeriodeGarantie() {
return periodeGarantie;
}
// Surcharger la méthode d'affichage pour inclure la période de
// garantie
@Override
public void appliquerRemise(double pourcentageRemise) {
// Appeler la méthode de la classe mére pour appliquer la
// réduction
super.appliquerRemise(pourcentageRemise);
// Afficher un message indiquant que la réduction a été
// appliquée
System.out.println("Remise appliquée au refrigérateur: "+ getNom());
}
}
// Définir la classe Main
public class Main {
public static void main(String[] args) {
// Créer un objet ProduitElectronique
ProduitElectronique p = new ProduitElectronique("P123", "Lave-vaisselle", 500.00);
// Appliquer une réduction et afficher le prix final
p.appliquerRemise(15);
System.out.println("ID du produit: " + p.getProduitID());
System.out.println("Nom: " + p.getNom());
System.out.println("Prix après réduction: " + p.getPrixFinal() +" €");
System.out.println();
// Créer un objet Refrigerateur
Refrigerateur r = new Refrigerateur("P789", "Réfrigérateur Samsung", 900.00, 12);
// Appliquer une réduction et afficher le prix final
r.appliquerRemise(15);
System.out.println("ID du produit: " + r.getProduitID());
System.out.println("Nom: " + r.getNom());
System.out.println("Prix après réduction: " + r.getPrixFinal() +" €");
// Afficher la période de garantie
System.out.println("Période de garantie: " + r.getPeriodeGarantie() + " mois");
// Prolonger la période de garantie et afficher la nouvelle
// période de garantie
r.prolongerGarantie(12);
System.out.println("Période de garantie après prolongation: "+ r.getPeriodeGarantie()+ " mois");
}
}
Sortie:
ID du produit: P123 Nom: Lave-vaisselle Prix après réduction: 425.0 € Remise appliquée au refrigérateur: Réfrigérateur Samsung ID du produit: P789 Nom: Réfrigérateur Samsung Prix après réduction: 765.0 € Période de garantie: 12 mois Période de garantie après prolongation: 24 mois
Exercice 3:
Écrire un programme Java pour créer une classe appelée « Batiment » avec des attributs pour l’adresse, le nombre d’étages et la surface totale. Créez des sous-classes « BatimentResidentiel » et « BatimentCommercial » qui ajoutent des attributs spécifiques tels que le nombre d’appartements pour les bâtiments résidentiels et l’espace de bureau pour les bâtiments commerciaux. Implémentez une méthode pour calculer le loyer total pour chaque sous-classe.
Diagrame de classe:

import java.util.ArrayList;
import java.util.List;
// Définir la classe Batiment
class Batiment {
// Attributs de la classe Batiment
String adresse;
int nombreDetages;
double surfaceTotale;
// Constructeur pour la classe Batiment
public Batiment(String adresse, int nombreDetages, double surfaceTotale) {
this.adresse = adresse;
this.nombreDetages = nombreDetages;
this.surfaceTotale = surfaceTotale;
}
// Méthode pour afficher des informations sur le batiment
public void afficher() {
System.out.println("Adresse: "+ adresse);
System.out.println("Nombre d'étages: "+ nombreDetages);
System.out.println("Surface totale: "+ surfaceTotale +" mètres");
}
}
// Définir la classe BatimentResidentiel qui hérite de Batiment
class BatimentResidentiel extends Batiment {
// Attribut supplémentaire pour BatimentResidentiel
int nombreDappartements;
double loyerParAppartement;
// Constructeur de la classe BatimentResidentiel
public BatimentResidentiel(String adresse, int nombreDetages, double surfaceTotale, int nombreDappartements, double loyerParAppartement) {
// Appeler le constructeur de la classe mére
super(adresse, nombreDetages, surfaceTotale);
this.nombreDappartements = nombreDappartements;
this.loyerParAppartement = loyerParAppartement;
}
// Méthode pour calculer le loyer total d'un bâtiment résidentiel
public double calculateTotalRent() {
return nombreDappartements * loyerParAppartement;
}
// Surcharger la méthode afficher pour inclure des détails
// supplémentaires
@Override
public void afficher() {
super.afficher();
System.out.println("Nombre d'appartements: "+ nombreDappartements);
System.out.println("Loyer par appartement: "+ loyerParAppartement +" €");
System.out.println("Total des loyers: "+ calculateTotalRent() +" €");
}
}
// Définir la classe BatimentCommercial qui hérite de Batiment
class BatimentCommercial extends Batiment {
// Attribut supplémentaire pour BatimentCommercial
double espaceBureau; // en mètres carrés
double loyerParMetreCarre;
// Constructeur de la classe BatimentCommercial
public BatimentCommercial(String adresse, int nombreDetages, double surfaceTotale, double espaceBureau, double loyerParMetreCarre) {
// Appeler le constructeur de la classe mére
super(adresse, nombreDetages, surfaceTotale);
this.espaceBureau = espaceBureau;
this.loyerParMetreCarre = loyerParMetreCarre;
}
// Méthode pour calculer le loyer total d'un bâtiment commercial
public double calculateTotalRent() {
return espaceBureau * loyerParMetreCarre;
}
// Surcharger la méthode afficher pour inclure des détails
// supplémentaires
@Override
public void afficher() {
super.afficher();
System.out.println("Espace de bureau: "+ espaceBureau +" mètres");
System.out.println("Loyer par mètre carré: "+ loyerParMetreCarre +" €");
System.out.println("Total des loyers: "+ calculateTotalRent() +" €");
}
}
// Définir la classe Main
public class Main {
public static void main(String[] args) {
// Créer une instance de BatimentResidentiel
BatimentResidentiel r = new BatimentResidentiel("Rue 30, Quartier Saindenis", 15, 23000.0, 30, 1500.0);
// Créer une instance de BatimentCommercial
BatimentCommercial c = new BatimentCommercial("Rue 11, Quartier Laurence", 20, 5000.0, 4000.0, 25.0);
// Afficher des informations sur le bâtiment résidentiel
System.out.println("Info sur le bâtiment résidentiel:");
r.afficher();
// Afficher des informations sur le bâtiment commercial
System.out.println("\nInfo sur le bâtiment commercial:");
c.afficher();
}
}
Sortie:
Info sur le bâtiment résidentiel: Adresse: Rue 30, Quartier Saindenis Nombre d'étages: 15 Surface totale: 23000.0 mètres Nombre d'appartements: 30 Loyer par appartement: 1500.0 € Total des loyers: 45000.0 € Info sur le bâtiment commercial: Adresse: Rue 11, Quartier Laurence Nombre d'étages: 20 Surface totale: 5000.0 mètres Espace de bureau: 4000.0 mètres Loyer par mètre carré: 25.0 € Total des loyers: 100000.0 €
Exercice 4:
Écrire un programme Java pour créer une classe appelée « Evenement » avec des attributs pour le nom de l’événement, la date et le lieu. Créer des sous-classes « Seminaire » et « PerformancesMusicales » qui ajoutent des attributs spécifiques tels que le nombre de conférenciers pour les séminaires et la liste des artistes pour les concerts. Implémenter des méthodes pour afficher les détails de l’événement et vérifier s’il y a des conflits dans le planning de l’événement.
Diagrame de classe:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
// Définir la classe Evenement
class Evenement {
// Déclarer les attributs: nomEvenement, date et lieu.
String nomEvenement;
Date date;
String lieu;
// Constructeur: Initialiser les attributs nomEvenement, date
// et lieu
public Evenement(String nomEvenement, Date date, String lieu) {
this.nomEvenement = nomEvenement;
this.date = date;
this.lieu = lieu;
}
// Afficher le nom, la date et le lieu de l'événement
public void afficher() {
System.out.println("Nom de l'événement: " + nomEvenement);
System.out.println("Date: " + date);
System.out.println("Lieu: " + lieu);
}
// Vérifie si l'événement en cours entre en conflit avec un autre
// événement en comparant leurs dates et lieux.
public boolean checkConflit(Evenement e) {
return this.date.equals(e.date) && this.lieu.equals(e.lieu);
}
}
// Définir la classe Séminaire qui hérite Evenement
class Seminaire extends Evenement {
// Déclarer l'attribut supplémentaire pour le nombre de
// conférenciers spécifique à la classe Seminaire
int nombreDeConf;
public Seminaire(String nomEvenement, Date date, String lieu, int nombreDeConf) {
super(nomEvenement, date, lieu);
this.nombreDeConf = nombreDeConf;
}
@Override
public void afficher() {
super.afficher();
System.out.println("Nombre de conférenciers: "+ nombreDeConf);
}
}
// Définir la classe PerformancesMusicales qui hérite Evenement
class PerformancesMusicales extends Evenement {
// Déclarer l'attribut supplémentaire pour la liste des artistes
// spécifique à la classe PerformancesMusicales
List artistes;
public PerformancesMusicales(String nomEvenement, Date date, String lieu, List artistes) {
super(nomEvenement, date, lieu);
this.artistes = artistes;
}
@Override
public void afficher() {
super.afficher();
System.out.println("Artistes: "+ String.join(", ", artistes));
}
}
// Définir la classe Main
public class Main {
public static void main(String[] args) {
// Créer des dates différentes pour éviter les conflits
// Créer une date pour les tests
Date date = new Date();
// Créer une instance de Seminaire
Seminaire seminar = new Seminaire("La journée d'étude", date, "Centre de congrès", 4);
// Créer une instance de PerformancesMusicales
List artistes = new ArrayList<>();
artistes.add("Groupe A");
artistes.add("Groupe B");
PerformancesMusicales performance = new PerformancesMusicales("Teintes harmonieuses", date, "Centre de congrès", artistes);
// Afficher les détails du séminaire
System.out.println("Les détails du séminaire:");
seminar.afficher();
// Afficher les détails de la performance musicale
System.out.println("\nLes détails de la performance musicale:");
performance.afficher();
// Vérifier s'il y a des conflits d'horaire
if (seminar.checkConflit(performance)) {
System.out.println("\nConflit détecté : Les deux événements sont programmés à la même heure et au même endroit.");
} else {
System.out.println("\nPas de conflit : Les événements sont programmés à des moments ou dans des lieux différents.");
}
}
}
Sortie:
Les détails du séminaire: Nom de l'événement: La journée d'étude Date: Sun Sep 29 18:17:37 GMT 2024 Lieu: Centre de congrès Nombre de conférenciers: 4 Les détails de la performance musicale: Nom de l'événement: Teintes harmonieuses Date: Sun Sep 29 18:17:37 GMT 2024 Lieu: Centre de congrès Artistes: Groupe A, Groupe B Conflit détecté : Les deux événements sont programmés à la même heure et au même endroit.
Exercice 5:
Écrivez un programme Java pour créer une classe appelée « CommandeClient » avec des attributs pour l’ID de la commande, le client et la date de la commande. Créez une sous-classe « CommandeEnLigne » qui ajoute des attributs pour l’adresse de livraison et le numéro de suivi. Implémentez des méthodes pour calculer le délai de livraison en fonction de l’adresse et mettre à jour le statut de la livraison.
Diagrame de classe:

// Importer les classes nécessaires à la gestion des dates
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
// Définir la classe CommandeClient
class CommandeClient {
// Attributs pour l'ID de la commande, le client et la date de la
// commande
private String IdCommande;
private String client;
private LocalDate DateCommande;
// Constructeur pour initialiser l'objet CommandeClient
public CommandeClient(String IdCommande, String client, LocalDate DateCommande) {
this.IdCommande = IdCommande;
this.client = client;
this.DateCommande = DateCommande;
}
// Méthode pour récupérer l'ID de la commande
public String getIdCommande() {
return IdCommande;
}
// Méthode pour récupérer le client
public String getClient() {
return client;
}
// Méthode pour récupérer la date de la commande
public LocalDate getDateCommande() {
return DateCommande;
}
// Méthode pour afficher les détails de la commande
public void afficher() {
System.out.println("ID de la commande: "+ IdCommande);
System.out.println("Client: "+ client);
System.out.println("Date de la commande: "+ DateCommande);
}
}
// Définir la sous-classe CommandeEnLigne qui hérite de
// CommandeClient
class CommandeEnLigne extends CommandeClient {
// Attributs spécifiques pour l'adresse de livraison et le numéro
// de suivi
private String adresseLivraison;
private String numSuivi;
// Constructeur pour initialiser l'objet CommandeEnLigne
public CommandeEnLigne(String IdCommande, String client, LocalDate DateCommande, String adresseLivraison, String numSuivi) {
// Appeler le constructeur de la classe mére pour initialiser
// les attributs communs
super(IdCommande, client, DateCommande);
this.adresseLivraison = adresseLivraison;
this.numSuivi = numSuivi;
}
// Méthode pour récupérer l'adresse de livraison
public String getAdresseLivraison() {
return adresseLivraison;
}
// Méthode pour récupérer le numéro de suivi
public String getNumSuivi() {
return numSuivi;
}
// Méthode pour calculer le délai de livraison en fonction de
// l'adresse
public int calculerDelaiLivraison() {
// En supposant que le délai de livraison est basé sur la
// longueur de la chaîne d'adresse
return adresseLivraison.length() % 10 + 1;
}
// Méthode de mise à jour de l'état de suivi
public void actualiserEtatSuivi(String newEtat) {
// Afficher l'état de suivi mis à jour
System.out.println("Numéro de suivi: "+ numSuivi +" - Etat: "+ newEtat);
}
// Surcharger la méthode afficher pour inclure des détails
// supplémentaires
@Override
public void afficher() {
// Appeler la méthode de la classe mére pour afficher
// les détails communs
super.afficher();
// Afficher des détails supplémentaires pour la commande en
// ligne
System.out.println("Adresse de livraison: "+ adresseLivraison);
System.out.println("Numéro de suivi: "+ numSuivi);
}
}
// Définir la classe Main
public class Main {
public static void main(String[] args) {
// Créer un objet CommandeClient
CommandeClient c1 = new CommandeClient("C123", "Alex Leo", LocalDate.now());
// Afficher les détails de la commande
c1.afficher();
System.out.println();
// Créer un objet CommandeEnLigne
CommandeEnLigne c2 = new CommandeEnLigne("c789", "Ali Boura", LocalDate.now(), "Rue 30, Quartier Saindenis", "Ref129");
// Afficher les détails de la commande en ligne
c2.afficher();
// Calculer et afficher le délai de livraison
int t = c2.calculerDelaiLivraison();
System.out.println("Délai de livraison estimé: "+ t +" jours");
// Mettre à jour et afficher l'état de la commande
c2.actualiserEtatSuivi("En cours de route");
}
}
Sortie:
ID de la commande: C123 Client: Alex Leo Date de la commande: 2024-09-29 ID de la commande: c789 Client: Ali Boura Date de la commande: 2024-09-29 Adresse de livraison: Rue 30, Quartier Saindenis Numéro de suivi: Ref129 Délai de livraison estimé: 7 jours Numéro de suivi: Ref129 - Etat: En cours de route
Éditeur de code Java: Testez votre code en ligne!
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
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




