From 89b43d8a0d7b9b1997cc10303cf9c95e597907aa Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 05:36:12 +0330 Subject: [PATCH 01/10] implement Vehicle.java --- src/main/java/org/model/Vehicle.java | 31 +++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..42ebee4 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -20,13 +20,38 @@ public abstract class Vehicle { this.mileage = mileage; } - // TODO: Create getters for all fields - // TODO: Implement addMileage(double km) + public String getBrand() { + return this.brand; + } + + public String getModel() { + return this.model; + } + + public int getYear() { + return this.year; + } + + public double getMileage() { + return this.mileage; + } + + // If km is negative → print error // Otherwise increase mileage + public void addMileage(double km) { + if(km<0) { + System.out.print("km cannot be negative"); + } + else { + this.mileage += km; + } + } + + + public abstract String getEnergyType(); - // TODO: Declare abstract method getEnergyType() public void basicInfo() { System.out.println( -- 2.54.0 From 7799febfd6c5dbcbb3da0e366c9a10814531b1d6 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 05:53:51 +0330 Subject: [PATCH 02/10] implement Car.java --- src/main/java/org/model/Car.java | 40 ++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 74836b5..87b8e9b 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -18,24 +18,34 @@ 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" - // TODO: Override showDetails() - // Print brand, model, year, mileage, and number of seats + @Override + public String getEnergyType() { + return "Unknown"; + } - /* - * 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 void showDetails() { + super.basicInfo(); + System.out.println(" | seats: " + this.seats); + } + + + @Override + public boolean needsService(Vehicle v) { + if(v.getMileage()>10000) { + return true; + } + return false; + } + + @Override + public void performService() { + System.out.println("General car service completed"); + } } -- 2.54.0 From 989c2fe43b6f2198d76c2458a04aa7721c2658fe Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 06:18:44 +0330 Subject: [PATCH 03/10] implement GasCar.java --- src/main/java/org/model/GasCar.java | 48 ++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..e4c5b63 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -27,13 +27,47 @@ public class GasCar extends Car implements Refuelable { this.fuelType = fuelType; } - // TODO: Override getEnergyType() → return fuelType + " (Gas)" - // TODO: Implement refuel(double amount) - // Validate amount - // Cap at 100 + @Override + public String getEnergyType() { + return (fuelType + " (Gas)"); + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print fuel level and fuel type + + @Override + public void refuel(double amount) { + if(amount<0) { + System.out.println("amount cannot be negative"); + } + else { + fuelLevel += amount; + } + + if(fuelLevel>100) { + fuelLevel = 100; + } + } + + + @Override + public void showDetails() { + super.showDetails(); + System.out.println(" | fuel level: " + fuelLevel + + " | fuel type: " + fuelType + ); + } + + @Override + public boolean needsService(Vehicle v) { + if(v.getMileage()>12000) + return true; + + return false; + } + + @Override + public void performService() { + System.out.println("Engine oil changed"); + this.fuelLevel = 100; + } } -- 2.54.0 From a419bf1858d108bb2f4fd077225bd89040c2ba9b Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 06:30:40 +0330 Subject: [PATCH 04/10] implement ElectricCar.java --- src/main/java/org/model/ElectricCar.java | 45 ++++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 2ee9bd8..63e2d62 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -27,13 +27,44 @@ public class ElectricCar extends Car implements Chargeable { this.chargeLevel = chargeLevel; } - // TODO: Override getEnergyType() → return "Electric" - // TODO: Override showDetails() - // Call super.showDetails() - // Print battery capacity and charge level + @Override + public String getEnergyType() { + return "Electric"; + } - // TODO: Implement charge(double amount) - // Validate negative - // Cap at 100 + + @Override + public void showDetails() { + super.showDetails(); + System.out.println(" | battery capacity: " + batteryCapacity + + " | charge level: " + chargeLevel + ); + } + + + @Override + public void charge(double amount) { + if(amount<0) + System.out.println("amont cannot be negative"); + else + chargeLevel += amount; + + if(chargeLevel>100) + chargeLevel = 100; + } + + @Override + public boolean needsService(Vehicle v) { + if(v.getMileage()>8000) + return true; + + return false; + } + + @Override + public void performService() { + System.out.println("Battery system checked"); + chargeLevel = 100; + } } -- 2.54.0 From ae505f04be13ba4355f0bde27e102dbcefd76614 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 06:36:19 +0330 Subject: [PATCH 05/10] implement SportsCar.java --- src/main/java/org/model/SportsCar.java | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..8659517 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -24,7 +24,22 @@ 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(" | accelaration time: " + zeroToHundred); + } + + @Override + public boolean needsService(Vehicle v) { + if(v.getMileage()>5000) + return true; + return false; + } + + @Override + public void performService() { + System.out.println("High-performance brake system checked"); + } } -- 2.54.0 From 77693824213dca637a89a68475d6d94cef25b426 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 11:56:03 +0330 Subject: [PATCH 06/10] implement Main.java --- src/main/java/org/Main.java | 156 ++++++++++++------------------------ 1 file changed, 50 insertions(+), 106 deletions(-) diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..7618064 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,126 +1,70 @@ package org; +import org.behavior.Serviceable; +import org.model.ElectricCar; +import org.model.GasCar; +import org.model.SportsCar; +import org.model.Vehicle; +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", "Model S", 2022, 1000, + 100, 550, 50 // batteryCapacity, range + ); + + GasCar toyota = new GasCar( + "Toyota", "Corolla", 2018, 85000, + 5, 50, "Petrol" // seats, fuelCapacity, fuelType + ); + + SportsCar ferrari = new SportsCar( + "Ferrari", "F8 Tributo", 2021, 12000, + 2, 3.9, "oil", 710 // seats, engineSize, horsepower + ); + Vehicle[] vehicles = {tesla, toyota, ferrari}; + System.out.println("\n--------------BASIC INFO--------------\n"); + for(int i=0 ; i<3 ; i++) { + vehicles[i].basicInfo(); + 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). - // ============================================================ + System.out.println("--------------INSPECT--------------\n"); + for(int i=0 ; i<3 ; i++) { + VehicleInspector.inspect(vehicles[i]); + System.out.println(); + } + Serviceable[] serviceables = {tesla, toyota, ferrari}; + System.out.println("--------------SERVISES--------------\n"); + for(int i=0 ; i<3 ; i++) { + Vehicle temp = (Vehicle) serviceables[i]; - // ============================================================ - // 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 ==="); - // - // ============================================================ - - + if(serviceables[i].needsService(temp)) { + + System.out.println(temp.getBrand() + " " + temp.getModel()); + serviceables[i].performService(); + + } + else { + System.out.println(temp.getBrand() + " " + temp.getModel() + + " does not need service"); + } + System.out.println(); + } + System.out.println("========= Workshop Completed ========="); } } -- 2.54.0 From faffb3c801c8ff9b85019fbd5b3794c4abeb49e2 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 11:57:05 +0330 Subject: [PATCH 07/10] implement VehicleInspector.java --- src/main/java/org/util/VehicleInspector.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..7e04eb4 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; /* @@ -13,10 +16,15 @@ public class VehicleInspector { public static void inspect(Vehicle v) { v.basicInfo(); + String type = v.getEnergyType(); - // 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"); } } -- 2.54.0 From 38050249231149036e3a080111e2317154acb295 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 13:21:25 +0330 Subject: [PATCH 08/10] implement HybirdCar.java --- src/main/java/org/model/HybirdCar.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/org/model/HybirdCar.java diff --git a/src/main/java/org/model/HybirdCar.java b/src/main/java/org/model/HybirdCar.java new file mode 100644 index 0000000..bc85102 --- /dev/null +++ b/src/main/java/org/model/HybirdCar.java @@ -0,0 +1,4 @@ +package org.model; + +public class HybirdCar { +} -- 2.54.0 From 8f252041e1b61c88a1b50f3c43f724eb66e1feb7 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 13:24:36 +0330 Subject: [PATCH 09/10] edit showDetails method --- src/main/java/org/model/Car.java | 2 +- src/main/java/org/model/HybirdCar.java | 59 +++++++++++++++++++++++++- src/main/java/org/model/SportsCar.java | 2 +- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 87b8e9b..aec7b0f 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -32,7 +32,7 @@ public abstract class Car extends Vehicle implements Serviceable { @Override public void showDetails() { super.basicInfo(); - System.out.println(" | seats: " + this.seats); + System.out.print("seats: " + this.seats); } diff --git a/src/main/java/org/model/HybirdCar.java b/src/main/java/org/model/HybirdCar.java index bc85102..33d4225 100644 --- a/src/main/java/org/model/HybirdCar.java +++ b/src/main/java/org/model/HybirdCar.java @@ -1,4 +1,61 @@ package org.model; -public class HybirdCar { +import org.behavior.Chargeable; +import org.behavior.Refuelable; + +public class HybirdCar extends Car implements Refuelable, Chargeable { + + private double batterLevel; + private double fuelLevel; + + public HybirdCar(String brand, String model, int year, + double mileage,int seats, double batterLevel, double fuelLevel) { + + super(brand, model, year, mileage, seats); + this.batterLevel = batterLevel; + this.fuelLevel = fuelLevel; + + + + } + + @Override + public void refuel(double amount) { + if(amount<0) { + System.out.println("amount cannot be negative"); + } + else { + fuelLevel += amount; + } + + if(fuelLevel>100) { + fuelLevel = 100; + } + } + + @Override + public void charge(double amount) { + if(amount<0) + System.out.println("amount cannot be negative"); + else + batterLevel += amount; + + if(batterLevel>100) + batterLevel = 100; + } + + @Override + public boolean needsService(Vehicle v) { + if(v.getMileage()>10000) + return true; + + return false; + } + + @Override + public void performService() { + System.out.println("Engine oil changed and battery system checked"); + batterLevel = 100; + fuelLevel = 100; + } } diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 8659517..cb25798 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -28,7 +28,7 @@ public class SportsCar extends GasCar { @Override public void showDetails() { super.showDetails(); - System.out.println(" | accelaration time: " + zeroToHundred); + System.out.println("accelaration time: " + zeroToHundred); } @Override -- 2.54.0 From c21faaff2995199cae5d2ff23c10afa00282abd3 Mon Sep 17 00:00:00 2001 From: Fateme Azizi Date: Mon, 27 Apr 2026 13:28:50 +0330 Subject: [PATCH 10/10] edit VehicleInspector.java --- src/main/java/org/util/VehicleInspector.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index 7e04eb4..de8348d 100644 --- a/src/main/java/org/util/VehicleInspector.java +++ b/src/main/java/org/util/VehicleInspector.java @@ -16,7 +16,6 @@ public class VehicleInspector { public static void inspect(Vehicle v) { v.basicInfo(); - String type = v.getEnergyType(); if(v instanceof ElectricCar) System.out.println("Check battery system"); -- 2.54.0