package org; import org.model.ElectricCar; import org.model.GasCar; import org.model.SportsCar; import org.model.Vehicle; import org.util.VehicleInspector; import org.behavior.Serviceable; public class Main { public static void main(String[] args) { // ============================================================ // 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(...); // ============================================================ ElectricCar chevrolet = new ElectricCar("Chevrolet", "Bolt EV", 2023, 8500, 5, 65, 80) ; GasCar toyota = new GasCar("Toyota", "Camery", 2022, 45000, 5, 65, "Petrol"); SportsCar lamborghini = new SportsCar("Lamborghini", "Huracan EVO", 2022, 9500, 2, 55, "Petrol", 3.2) ; // ============================================================ // 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). // ============================================================ Vehicle[] vehicle = {chevrolet, toyota, lamborghini}; // ============================================================ // 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. // ============================================================ for (Vehicle v : vehicle) { v.basicInfo(); System.out.println(); } // ============================================================ // TODO 4: // Use VehicleInspector to inspect each vehicle: // // VehicleInspector.inspect(v); // // Purpose: // • Demonstrate the use of `instanceof` // • Show subclass‑specific inspection messages // ============================================================ for(Vehicle v : vehicle) { VehicleInspector.inspect(v) ; System.out.println(); } // ============================================================ // 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; // // ============================================================ Serviceable[] serviceables = {chevrolet, toyota, lamborghini}; // ============================================================ // 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. // ============================================================ for (Serviceable s : serviceables) { Vehicle v = (Vehicle) s; if (s.needsService(v)) { System.out.println(v.getBrand() + " " + v.getModel() + " need service !!"); s.performService(); } else System.out.println(v.getBrand() + "" + v.getModel() + "" + " does not need service :)"); } // ============================================================ // TODO 7 (Optional): // After everything is done, print a final message: // // System.out.println("=== Workshop Completed ==="); // // ============================================================ System.out.println("=== Workshop Completed ==="); } }