From 3a7e3ebea5c3dba6ff182b62921c8a970fabf522 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 10:06:24 +0330 Subject: [PATCH 1/8] complete inspect method in VehicleInspector class --- src/main/java/org/util/VehicleInspector.java | 21 ++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..0eeca1f 100644 --- a/src/main/java/org/util/VehicleInspector.java +++ b/src/main/java/org/util/VehicleInspector.java @@ -1,12 +1,12 @@ package org.util; import org.*; +import org.model.ElectricCar; +import org.model.GasCar; +import org.model.SportsCar; import org.model.Vehicle; -/* - * Utility class to inspect vehicles. - * Demonstrates instanceof and polymorphism. - */ + public class VehicleInspector { @@ -14,9 +14,14 @@ public class VehicleInspector { 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 service"); + } + else if (v instanceof SportsCar) { + System.out.println("Check brakes and performance"); + } + else if (v instanceof GasCar) { + System.out.println("Check engine and oil"); + } } } -- 2.54.0 From 2267f37d0deed861710cf7e52479247b5ef0d0c2 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 10:11:21 +0330 Subject: [PATCH 2/8] complete all TODO sections in Vehicle class --- src/main/java/org/model/Vehicle.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..119a475 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -1,10 +1,5 @@ package org.model; -/* - * Abstract base class for all vehicles. - * This class DOES NOT implement Serviceable. - * Service behavior will be defined in concrete subclasses. - */ public abstract class Vehicle { @@ -20,13 +15,18 @@ public abstract class Vehicle { this.mileage = mileage; } - // TODO: Create getters for all fields + public String getBrand() { return this.brand; } + public String getModel() { return this.model; } + public int getYear() { return this.year; } + public double getMileage() { return this.mileage; } - // TODO: Implement addMileage(double km) - // If km is negative → print error - // Otherwise increase mileage + public void addMileage(double mileage) { + if (mileage < 0) { + throw new IllegalArgumentException("Mileage cannot be negative"); + } + this.mileage += mileage; + } - // TODO: Declare abstract method getEnergyType() public void basicInfo() { System.out.println( @@ -37,4 +37,5 @@ public abstract class Vehicle { } public abstract void showDetails(); + public abstract String getEnergyType(); } -- 2.54.0 From eef8eb4933eea0af283baf4337f499dd10de8555 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 10:24:41 +0330 Subject: [PATCH 3/8] complete all TODO sections in Car class --- src/main/java/org/model/Car.java | 43 ++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 74836b5..c6db2c6 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -17,25 +17,36 @@ public abstract class Car extends Vehicle implements Serviceable { public Car(String brand, String model, int year, double mileage, int seats) { - - // TODO: Call super constructor + super(brand, model, year, mileage); this.seats = seats; } - // TODO: Override getEnergyType() → return "Unknown" + public int getSeats() { return this.seats; } - // TODO: Override showDetails() - // Print brand, model, year, mileage, and number of seats - /* - * Implement Serviceable methods: - * - * needsService(Vehicle v): - * - Check the mileage of the current car - * - If mileage > 10000 return true - * - Otherwise return false - * - * performService(): - * - Print: "General car service completed" - */ + @Override + public String getEnergyType() { + return "Unknown"; + } + + @Override + public void showDetails() { + System.out.println( + "brand: " + getBrand() + + " model: " + getModel() + + " year: " + getYear() + + " mileage: " + getMileage() + + " seats: " + getSeats() + ); + } + + @Override + public boolean needsService(Vehicle v) { + return getMileage() > 10000; + } + + @Override + public void performService() { + System.out.println("General car service completed"); + } } -- 2.54.0 From 26e6d9b82d9c95f6ec0fc3d24e37b2a89201de7e Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 10:40:55 +0330 Subject: [PATCH 4/8] complete all TODO sections in GasCar class --- src/main/java/org/model/Car.java | 8 ++--- src/main/java/org/model/GasCar.java | 53 ++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index c6db2c6..72e8db5 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -32,10 +32,10 @@ public abstract class Car extends Vehicle implements Serviceable { @Override public void showDetails() { System.out.println( - "brand: " + getBrand() - + " model: " + getModel() - + " year: " + getYear() - + " mileage: " + getMileage() + "brand: " + getBrand() + "\n" + + " model: " + getModel() + "\n" + + " year: " + getYear() + "\n" + + " mileage: " + getMileage() + "\n" + " seats: " + getSeats() ); } diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..548abcb 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -1,15 +1,5 @@ package org.model; -/* - * GasCar extends Car. - * Inherits Serviceable from Car. - * - * Service logic for GasCar: - * - needsService(): return true if mileage > 12000 - * - performService(): - * Print "Engine oil changed" - * Reset fuelLevel to 100 - */ import org.behavior.Refuelable; @@ -27,13 +17,42 @@ public class GasCar extends Car implements Refuelable { this.fuelType = fuelType; } - // TODO: Override getEnergyType() → return fuelType + " (Gas)" + public double getFuelLevel() { return this.fuelLevel; } + public String getFuelType() { return this.fuelType; } + public void setFuelLevel(double fuelLevel) { this.fuelLevel = fuelLevel; } - // TODO: Implement refuel(double amount) - // Validate amount - // Cap at 100 + @Override + public String getEnergyType() { + return getFuelType() + " (Gas)"; + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print fuel level and fuel type + @Override + public void refuel(double amount) { + if (amount < 0) { + throw new IllegalArgumentException("Amount must be positive"); + } + if ( getFuelLevel() + amount > 100 ) { + setFuelLevel(100); + } + setFuelLevel(getFuelLevel() + amount); + } + + @Override + public void showDetails() { + super.showDetails(); + System.out.println( + "fuel level: " + this.fuelLevel + "\n" + + " fuel type: " + this.fuelType); + } + + @Override + public boolean needsService(Vehicle v) { + return getMileage() > 12000; + } + + @Override + public void performService() { + System.out.println("Engine oil changed"); + setFuelLevel(100); + } } -- 2.54.0 From 46939f6f382105d598574a9f72f9c08c7f184416 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 10:51:59 +0330 Subject: [PATCH 5/8] complete all TODO sections in ElectricCar class --- src/main/java/org/model/ElectricCar.java | 55 ++++++++++++++++-------- src/main/java/org/model/GasCar.java | 4 +- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 2ee9bd8..82628a1 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -1,15 +1,5 @@ package org.model; -/* - * ElectricCar extends Car. - * It already inherits Serviceable from Car. - * - * Service logic for ElectricCar: - * - needsService(): return true if mileage > 8000 - * - performService(): - * Print "Battery system checked" - * Reset chargeLevel to 100 - */ import org.behavior.Chargeable; @@ -27,13 +17,44 @@ public class ElectricCar extends Car implements Chargeable { this.chargeLevel = chargeLevel; } - // TODO: Override getEnergyType() → return "Electric" + public int getBatteryCapacity() { return this.batteryCapacity; } + public void setBatteryCapacity(int batteryCapacity) { this.batteryCapacity = batteryCapacity; } + public double getChargeLevel() { return this.chargeLevel; } + public void setChargeLevel(double chargeLevel) { this.chargeLevel = chargeLevel; } - // TODO: Override showDetails() - // Call super.showDetails() - // Print battery capacity and charge level - // TODO: Implement charge(double amount) - // Validate negative - // Cap at 100 + @Override + public String getEnergyType() { + return "Electric"; + } + + @Override + public void showDetails() { + super.showDetails(); + System.out.println( + "battery capacity: " + getBatteryCapacity() + "\n" + + " charge level: " + getChargeLevel()); + } + + @Override + public void charge(double amount) { + if (amount < 0) { + throw new IllegalArgumentException("Amount must be positive"); + } + if ( getChargeLevel() + amount > 100 ) { + setChargeLevel(100); + } + setChargeLevel(getChargeLevel() + amount); + } + + @Override + public boolean needsService(Vehicle v) { + return getMileage() > 8000; + } + + @Override + public void performService() { + System.out.println("Battery system checked"); + setChargeLevel(100); + } } diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 548abcb..d5b17d6 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -41,8 +41,8 @@ public class GasCar extends Car implements Refuelable { public void showDetails() { super.showDetails(); System.out.println( - "fuel level: " + this.fuelLevel + "\n" - + " fuel type: " + this.fuelType); + "fuel level: " + getFuelLevel() + "\n" + + " fuel type: " + getFuelType()); } @Override -- 2.54.0 From 13e41f5f21af2efb98b94b33b526cebd017d5b10 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 10:58:27 +0330 Subject: [PATCH 6/8] complete all TODO sections in SportsCar class --- src/main/java/org/model/ElectricCar.java | 2 +- src/main/java/org/model/SportsCar.java | 26 ++++++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 82628a1..f997c15 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -46,7 +46,7 @@ public class ElectricCar extends Car implements Chargeable { } setChargeLevel(getChargeLevel() + amount); } - + @Override public boolean needsService(Vehicle v) { return getMileage() > 8000; diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..041d2bd 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -1,13 +1,5 @@ package org.model; -/* - * SportsCar extends GasCar. - * - * Special service logic for SportsCar: - * - needsService(): return true if mileage > 5000 - * - performService(): - * Print "High-performance brake system checked" - */ public class SportsCar extends GasCar { @@ -23,8 +15,20 @@ public class SportsCar extends GasCar { this.zeroToHundred = zeroToHundred; } + + @Override + public void showDetails() { + super.showDetails(); + System.out.println("acceleration time: " + this.zeroToHundred); + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print acceleration time + @Override + public boolean needsService(Vehicle v) { + return getMileage() > 5000; + } + + @Override + public void performService() { + System.out.println("High-performance brake system checked"); + } } -- 2.54.0 From 4cff34b20ac06078f737af81085dd722c920edbf Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 11:32:12 +0330 Subject: [PATCH 7/8] implement HybridCar class and add inspect for it in VehicleInspector class --- src/main/java/org/Main.java | 3 +- src/main/java/org/model/Car.java | 8 --- src/main/java/org/model/HybridCar.java | 57 ++++++++++++++++++++ src/main/java/org/model/SportsCar.java | 2 +- src/main/java/org/util/VehicleInspector.java | 4 ++ 5 files changed, 64 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/model/HybridCar.java diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..8efde34 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,5 +1,7 @@ package org; +import org.model.HybridCar; + public class Main { public static void main(String[] args) { @@ -20,7 +22,6 @@ public class Main { - // ============================================================ // TODO 2: // Create an array of Vehicle: diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 72e8db5..971877a 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -1,13 +1,5 @@ package org.model; -/* - * Car extends Vehicle. - * This class SHOULD implement Serviceable. - * - * Service logic for Car: - * - needsService(): return true if mileage > 10,000 - * - performService(): print "General car service completed" - */ import org.behavior.Serviceable; diff --git a/src/main/java/org/model/HybridCar.java b/src/main/java/org/model/HybridCar.java new file mode 100644 index 0000000..f893f1f --- /dev/null +++ b/src/main/java/org/model/HybridCar.java @@ -0,0 +1,57 @@ +package org.model; + +import org.behavior.Chargeable; +import org.behavior.Refuelable; + +public class HybridCar extends Car implements Refuelable, Chargeable { + private double batteryLevel; + private double fuelLevel; + + public HybridCar(String brand, String model, int year, + double mileage, int seats, double batteryLevel, double fuelLevel) { + super(brand, model, year, mileage, seats); + this.batteryLevel = batteryLevel; + this.fuelLevel = fuelLevel; + } + + @Override + public String getEnergyType() { + return "Hybrid"; + } + + @Override + public void showDetails() { + super.showDetails(); + System.out.println( + "Battery Level: " + this.batteryLevel + "\n" + + "Fuel Level: " + this.fuelLevel + ); + } + + @Override + public void charge(double amount) { + if (amount < 0) { + throw new IllegalArgumentException("Amount must be positive"); + } + if (this.batteryLevel + amount > 100) {this.batteryLevel = 100;} + this.batteryLevel += amount; + } + + @Override + public void refuel(double amount) { + if (amount < 0) { + throw new IllegalArgumentException("Amount must be positive"); + } + if (this.fuelLevel + amount > 100) {this.fuelLevel = 100;} + this.fuelLevel += amount; + } + + + @Override + public void performService() { + System.out.println("Engine oil changed and batter system checked"); + this.batteryLevel = 100; + this.fuelLevel = 100; + } + +} diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 041d2bd..050a4b5 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -15,7 +15,7 @@ public class SportsCar extends GasCar { this.zeroToHundred = zeroToHundred; } - + @Override public void showDetails() { super.showDetails(); diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index 0eeca1f..865fa96 100644 --- a/src/main/java/org/util/VehicleInspector.java +++ b/src/main/java/org/util/VehicleInspector.java @@ -3,6 +3,7 @@ package org.util; import org.*; import org.model.ElectricCar; import org.model.GasCar; +import org.model.HybridCar; import org.model.SportsCar; import org.model.Vehicle; @@ -23,5 +24,8 @@ public class VehicleInspector { else if (v instanceof GasCar) { System.out.println("Check engine and oil"); } + else if (v instanceof HybridCar) { + System.out.println("Check engine and oil and battery service"); + } } } -- 2.54.0 From e3d94d0b19795097097b1fd3809bbcff0135d6f8 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 28 Apr 2026 20:10:53 +0330 Subject: [PATCH 8/8] implement all TODO sections in Main class --- src/main/java/org/Main.java | 152 +++++++++--------------------------- 1 file changed, 39 insertions(+), 113 deletions(-) diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 8efde34..e600053 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,125 +1,51 @@ package org; -import org.model.HybridCar; +import org.behavior.Serviceable; +import org.model.*; +import org.util.VehicleInspector; 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 tesla = new ElectricCar("Tesla","3",2020,7000,5,100,60); + GasCar pride = new GasCar("Saipa","132",2002,200000,5,50,"Gasoline"); + HybridCar prius = new HybridCar("Toyota","Prius",2025,3000,5,70,90); + SportsCar ferrari = new SportsCar("Ferrari","488 GTB",2015,80000,2,20,"Gasoline",2.9); + + + Vehicle[] vehicles = {tesla,pride,prius,ferrari}; + System.out.println("=".repeat(20) + " Show Vehicles " + "=".repeat(20)); + for (Vehicle vehicle : vehicles) { + vehicle.basicInfo(); + System.out.println(); + } + + System.out.println("=".repeat(20) + " Inspect Vehicles " + "=".repeat(20)); + for (Vehicle vehicle : vehicles) { + VehicleInspector.inspect(vehicle); + System.out.println(); + } + + + Serviceable[] serviceables = {prius,ferrari,tesla,pride}; + + System.out.println("=".repeat(20) + " Check Services " + "=".repeat(20)); + for (Serviceable serviceable : serviceables) { + Vehicle v = (Vehicle) serviceable; + if (serviceable.needsService(v)) { + System.out.println("brand: " + v.getBrand() + " | model: " + v.getModel()); + serviceable.performService(); + System.out.println(); + } + else { + System.out.println("brand: " + v.getBrand() + " | model: " + v.getModel() + " doesn't needs service"); + 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 ==="); - // - // ============================================================ - - + System.out.println("=".repeat(20) + " Workshop Completed " + "=".repeat(20)); -- 2.54.0