class GestionVehicules { // Pour représenter l'année courante: // Il est aussi possible d'utiliser la classe Date // pour récupérer cette information automatiquement private static int ANNEE_ACTUELLE = 2020; public static void main(String[] args) { Vehicule[] vehicules = new Vehicule [5]; vehicules[0] = new Voiture("Peugeot", 2005, 147325.79, 2.5, 5, 180.0, 12000); vehicules[1] = new Voiture("Porsche", 1999, 250000.00, 6.5, 2, 280.0, 81320); vehicules[2] = new Voiture("Fiat", 2001, 7327.30, 1.6, 3, 65.0, 3000); vehicules[3] = new Avion("Cessna", 1982, 1230673.90, "HELICES", 250); vehicules[4] = new Avion("Nain Connu", 1993, 4321098.00, "REACTION", 1300); for (int i = 0; i < vehicules.length; i++) { vehicules[i].calculePrix(ANNEE_ACTUELLE); vehicules[i].affiche(); } } } class Vehicule { private String marque; private int dateAchat; private double prixAchat; private double prixCourant; public Vehicule(String marque, int date, double prix) { this.marque = marque; dateAchat = date; prixAchat = prix; prixCourant = prix; } public void calculePrix(int anneActuelle) { double decote = (anneActuelle - dateAchat) * 0.01; prixCourant = Math.max(0.0, (1.0 - decote) * prixAchat); } public void affiche() { System.out.print("marque : " + marque + ", date d'achat : " + dateAchat + ", prix actuel : " + prixCourant); System.out.println(); } public int getDateAchat(){ return dateAchat; } public String getMarque(){ return marque; } public double getPrixAchat(){ return prixAchat; } public void setPrixCourant(double prix){ prixCourant = prix; } } class Voiture extends Vehicule { private double cylindree; private int nbPortes; private double puissance; private double kilometrage; public Voiture(String marque, int date, double prix, double cylindree, int portes, double cv, double km) { super(marque, date, prix); this.cylindree = cylindree; nbPortes = portes; puissance = cv; kilometrage = km; } public void calculePrix(int anneActuelle) { double decote = (anneActuelle - getDateAchat()) * .02; // On force le type en int de manià ̈re à arrondir le résultat // On verra dans quelques semaines une manià ̈re plus élégante de faire // ce genre de choses... decote += 0.05 * (int)(kilometrage / 10000); if (getMarque().equals("Fiat") || getMarque().equals("Renault")) { decote += 0.1; } else if (getMarque().equals("Ferrari") || getMarque().equals("Porsche")) { decote -= 0.2; } setPrixCourant(Math.max(0.0, (1.0 - decote) * getPrixAchat())); } public void affiche() { System.out.println(" ---- Voiture ----"); super.affiche(); System.out.println(cylindree + " litres, " + nbPortes + " portes, " + puissance + " CV, " + kilometrage + " km."); } } class Avion extends Vehicule { private String moteur; private int heuresVol; public Avion(String marque, int date, double prix, String moteur, int heures) { super(marque, date, prix); this.moteur = moteur; heuresVol = heures; } public void calculePrix(int anneActuelle) { double decote; if (moteur == "HELICES") { decote = 0.1 * heuresVol / 100.0; } else { decote = 0.1 * heuresVol / 1000.0; } setPrixCourant(Math.max(0.0, (1.0 - decote) * getPrixAchat())); } public void affiche() { System.out.println(" ---- Avion à " + moteur + "----"); super.affiche(); System.out.println(heuresVol + " heures de vol."); } }