diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..46d2bb7 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,126 +1,63 @@ package org; -public class Main { - public static void main(String[] args) { +import org.behavior.Serviceable; +import org.model.ElectricCar; +import org.model.GasCar; +import org.model.SportsCar; +import org.model.Vehicle; +import org.util.VehicleInspector; - // ============================================================ - // TODO 1: - // Create one instance of each vehicle type: - // - ElectricCar - // - GasCar - // - SportsCar - // - // Requirements: - // • Use the constructors you created in each class. - // • Provide realistic values (brand, model, year, mileage, etc.). - // • Store them in variables such as: - // ElectricCar tesla = new ElectricCar(...); - // ============================================================ +public class Main +{ + public static void main(String[] args) + { + ElectricCar tesla = new ElectricCar("Tesla", "Model S", 2022, 1000, + 100, 550, 50); + + GasCar toyota = new GasCar("Toyota", "Corolla", 2018, 85000, + 5, 50, "Petrol"); + + SportsCar ferrari = new SportsCar("Ferrari", "F8 Tributo", 2021, 12000, + 2, 3.9, "oil", 710); + Vehicle[] vehicles = {tesla, toyota, ferrari}; + System.out.println(); + for (Vehicle v : vehicles) + { + v.basicInfo(); + System.out.println("----------------------------------------------------------------"); + } + System.out.println(); + System.out.println("=================================================================="); + System.out.println(); + for (Vehicle v : vehicles) + { + VehicleInspector.inspect(v); + System.out.println("----------------------------------------------------------------"); + } + System.out.println(); + System.out.println("=================================================================="); - // ============================================================ - // TODO 2: - // Create an array of Vehicle: - // Vehicle[] vehicles = { ... }; - // - // This array MUST contain the objects created above. - // This demonstrates **polymorphism** because all different - // subclasses (ElectricCar, GasCar, SportsCar) are stored - // as their parent type (Vehicle). - // ============================================================ - - - - - - // ============================================================ - // TODO 3: - // Loop through the Vehicle[] array and: - // • Call v.basicInfo(); - // • Print a blank line after each. - // - // Purpose: - // Demonstrate that all subclasses share the same Vehicle - // behavior and can call inherited methods. - // ============================================================ - - - - - - // ============================================================ - // TODO 4: - // Use VehicleInspector to inspect each vehicle: - // - // VehicleInspector.inspect(v); - // - // Purpose: - // • Demonstrate the use of `instanceof` - // • Show subclass‑specific inspection messages - // ============================================================ - - - - - - // ============================================================ - // TODO 5: - // Create an array of Serviceable: - // Serviceable[] serviceables = { ... }; - // - // This demonstrates **interface‑based polymorphism**. - // Every Car subtype implements Serviceable. - // - // IMPORTANT: - // • You must cast to Vehicle when needed: - // Vehicle v = (Vehicle) s; - // - // ============================================================ - - - - - - // ============================================================ - // TODO 6: - // Loop through the Serviceable[] array: - // - // Steps inside loop: - // - // 1. Cast the current object to Vehicle: - // Vehicle v = (Vehicle) s; - // - // 2. Check: - // if (s.needsService(v)) { ... } - // - // 3. If true: - // - Print a message showing brand + model - // - Call s.performService(); - // - // 4. Otherwise: - // - Print that the car does not need service - // - // Add blank lines between each item for readability. - // ============================================================ - - - - - - // ============================================================ - // TODO 7 (Optional): - // After everything is done, print a final message: - // - // System.out.println("=== Workshop Completed ==="); - // - // ============================================================ - - - + Serviceable[] serviceables = {(Serviceable) tesla, (Serviceable) toyota, (Serviceable) ferrari}; + for (Serviceable s : serviceables) + { + Vehicle v = (Vehicle) s; + if (s.needsService(v)) + { + System.out.println(v.getBrand() + " " + v.getModel()); + s.performService(); + } + else + { + System.out.println(v.getBrand() + " " + v.getModel() + " does not need service"); + } + System.out.println("----------------------------------------------------------------"); + } + System.out.println("=== Workshop Completed ==="); } } diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 0215c91..ddf1dbc 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -11,23 +11,20 @@ package org.model; import org.behavior.Serviceable; -public abstract class Car extends Vehicle implements Serviceable { +public abstract class Car extends Vehicle implements Serviceable +{ private int seats; - public Car(String brand, String model, int year, double mileage, int seats) { - - // TODO: Call super constructor + public Car(String brand, String model, int year, double mileage, int seats) + { super(brand, model, year, mileage); this.seats = seats; } - // TODO: Override getEnergyType() → return "Unknown" @Override public String getEnergyType() { return "Unknown"; } - // TODO: Override showDetails() - // Print brand, model, year, mileage, and number of seats @Override public void showDetails() { @@ -50,7 +47,8 @@ public abstract class Car extends Vehicle implements Serviceable { * performService(): * - Print: "General car service completed" */ - public boolean needService(Vehicle v) + @Override + public boolean needsService(Vehicle v) { if (getMileage() > 1000 ) return true; return false; diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 2ee9bd8..a79d628 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -13,27 +13,59 @@ package org.model; import org.behavior.Chargeable; -public class ElectricCar extends Car implements Chargeable { - +public class ElectricCar extends Car implements Chargeable +{ private int batteryCapacity; private double chargeLevel; - public ElectricCar(String brand, String model, int year, - double mileage, int seats, - int batteryCapacity, double chargeLevel) { - + public ElectricCar(String brand, String model, int year, double mileage, int seats, int batteryCapacity, double chargeLevel) + { super(brand, model, year, mileage, seats); this.batteryCapacity = batteryCapacity; this.chargeLevel = chargeLevel; } - // TODO: Override getEnergyType() → return "Electric" + @Override + public String getEnergyType() { return "Electric";} - // TODO: Override showDetails() - // Call super.showDetails() - // Print battery capacity and charge level + @Override + public void showDetails() + { + super.showDetails(); + System.out.println("The Capacity of the battery : " + batteryCapacity); + System.out.println("The charge level : " + chargeLevel); + } - // TODO: Implement charge(double amount) - // Validate negative - // Cap at 100 + @Override + public void charge(double amount) + { + if (amount < 0) + { + System.out.println("Error !"); + return; + } + + chargeLevel += amount; + + if (chargeLevel > 100) + { + chargeLevel = 100; + System.out.println("Full !"); + } + } + + @Override + public boolean needsService(Vehicle v) + { + if ( getMileage() > 8000) return true; + return false; + } + + @Override + public void performService() + { + System.out.println("Battery system checked"); + this.chargeLevel = 100; + System.out.println("Charge level reset to 100%"); + } } diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..c082645 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -13,27 +13,59 @@ package org.model; import org.behavior.Refuelable; -public class GasCar extends Car implements Refuelable { - +public class GasCar extends Car implements Refuelable +{ private double fuelLevel; private String fuelType; - public GasCar(String brand, String model, int year, - double mileage, int seats, - double fuelLevel, String fuelType) { - + public GasCar(String brand, String model, int year, double mileage, int seats, double fuelLevel, String fuelType) + { super(brand, model, year, mileage, seats); this.fuelLevel = fuelLevel; this.fuelType = fuelType; } - // TODO: Override getEnergyType() → return fuelType + " (Gas)" + @Override + public String getEnergyType() { return fuelType + "Gas"; } - // TODO: Implement refuel(double amount) - // Validate amount - // Cap at 100 + @Override + public void refuel(double amount) + { + if (amount < 0) + { + System.out.println("Error"); + return; + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print fuel level and fuel type + fuelLevel += amount; + if (fuelLevel > 100) + { + fuelLevel = 100; + System.out.println("Full !"); + } + + } + + @Override + public void showDetails() + { + super.showDetails(); + System.out.println("Fuel level : " + fuelLevel); + System.out.println("Fuel type : " + fuelType); + } + + @Override + public boolean needsService(Vehicle v) + { + if (getMileage() > 12000) return true; + return false; + } + + @Override + public void performService() + { + System.out.println("Engine oil changed"); + this.fuelLevel = 100; + System.out.println("Fuel level reset to 100"); + } } diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..1676789 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -24,7 +24,20 @@ public class SportsCar extends GasCar { this.zeroToHundred = zeroToHundred; } - // TODO: Override showDetails() - // Call super.showDetails() - // Print acceleration time + @Override + public void showDetails() + { + super.showDetails(); + System.out.println("Acceleration time : " + zeroToHundred); + } + + @Override + public boolean needsService(Vehicle v) + { + if (getMileage() > 5000) return true; + return false; + } + + @Override + public void performService() { System.out.println("High-performance brake system checked"); } } diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 3ee1b27..861550f 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -28,18 +28,12 @@ public abstract class Vehicle { public double getMileage() { return mileage; } - - // TODO: Implement addMileage(double km) - // If km is negative → print error - // Otherwise increase mileage - public void addMileage(double km) { if (km < 0) System.out.println("Error !"); else this.mileage += km; } - // TODO: Declare abstract method getEnergyType() public abstract String getEnergyType(); public void basicInfo() { diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..043499c 100644 --- a/src/main/java/org/util/VehicleInspector.java +++ b/src/main/java/org/util/VehicleInspector.java @@ -1,6 +1,9 @@ package org.util; import org.*; +import org.model.ElectricCar; +import org.model.GasCar; +import org.model.SportsCar; import org.model.Vehicle; /* @@ -8,15 +11,14 @@ import org.model.Vehicle; * Demonstrates instanceof and polymorphism. */ -public class VehicleInspector { - - public static void inspect(Vehicle v) { - +public class VehicleInspector +{ + public static void inspect(Vehicle v) + { v.basicInfo(); - // TODO: - // If ElectricCar → print "Check battery system" - // If SportsCar → print "Check brakes and performance" - // If GasCar → print "Check engine and oil" + if (v instanceof ElectricCar) System.out.println("Check battery system"); + else if (v instanceof SportsCar) System.out.println("Check brakes and performance"); + else if (v instanceof GasCar) System.out.println("Check engine and oil"); } }