// Classe abstraite Vehicule
public abstract class Vehicule {
private String marque;
private String immatriculation;
public Vehicule(String marque, String immatriculation) {
this.marque = marque;
this.immatriculation = immatriculation;
}
public String getMarque() {
return marque;
}
public String getImmatriculation() {
return immatriculation;
}
public abstract double calculerCoutLocation();
}
// Classe Voiture
public class Voiture extends Vehicule {
private int nbJoursLocation;
private double tarifJournalier;
public Voiture(String marque, String immatriculation, int nbJoursLocation, double tarifJournalier) {
super(marque, immatriculation);
this.nbJoursLocation = nbJoursLocation;
this.tarifJournalier = tarifJournalier;
}
@Override
public double calculerCoutLocation() {
return nbJoursLocation * tarifJournalier;
}
}
// Classe Camion
public class Camion extends Vehicule {
private double nbKm;
private double tarifKm;
public Camion(String marque, String immatriculation, double nbKm, double tarifKm) {
super(marque, immatriculation);
this.nbKm = nbKm;
this.tarifKm = tarifKm;
}
@Override
public double calculerCoutLocation() {
return nbKm * tarifKm;
}
}
// Classe principale MainApp
import java.util.*;
public class MainApp {
private static List<Vehicule> parcVehicules = new ArrayList<>();
public static void main(String[] args) {
parcVehicules.add(new Voiture("Peugeot", "123-ABC", 5, 400));
parcVehicules.add(new Camion("Mercedes", "456-DEF", 300, 2.5));
parcVehicules.add(new Voiture("Renault", "789-GHI", 3, 350));
parcVehicules.add(new Camion("Volvo", "101-JKL", 500, 3));
afficherCoutsLocation();
System.out.println("\n-> Coût total de location : " + coutTotalLocation());
List<Vehicule> chers = getVehiculesChers(1500);
System.out.println("\n-> Véhicules dont le coût dépasse 1500 :");
for (Vehicule v : chers) {
System.out.println(v.getMarque() + " - " + v.getImmatriculation() + " - " + v.calculerCoutLocation());
}
}
public static void afficherCoutsLocation() {
for (Vehicule v : parcVehicules) {
if (v instanceof Voiture) {
System.out.println("[Voiture] " + v.getMarque() +
" (" + v.getImmatriculation() + ") : " +
v.calculerCoutLocation() + " DH");
} else if (v instanceof Camion) {
System.out.println("[Camion] " + v.getMarque() +
" (" + v.getImmatriculation() + ") : " +
v.calculerCoutLocation() + " DH");
}
}
}
public static double coutTotalLocation() {
double total = 0;
for (Vehicule v : parcVehicules) {
total += v.calculerCoutLocation();
}
return total;
}
public static List<Vehicule> getVehiculesChers(double seuil) {
List<Vehicule> result = new ArrayList<>();
for (Vehicule v : parcVehicules) {
if (v.calculerCoutLocation() > seuil) {
result.add(v);
}
}
return result;
}
}