From 29c31f5845e5e6ca258d49816a6d7eef9952486b Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 17:04:47 +0330 Subject: [PATCH 01/10] Class Vehicle completed. --- src/main/java/org/model/Vehicle.java | 29 +++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..551b599 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -20,13 +20,32 @@ public abstract class Vehicle { this.mileage = mileage; } - // TODO: Create getters for all fields + public String getBrand() { + return brand; + } - // TODO: Implement addMileage(double km) - // If km is negative → print error - // Otherwise increase mileage + public String getModel() { + return model; + } - // TODO: Declare abstract method getEnergyType() + public int getYear() { + return year; + } + + public double getMileage() { + return mileage; + } + + public void addMileage(double km) { + if (km<0) { + System.out.println("The mileage can't be negative!"); + } + else { + mileage += km; + } + } + + abstract String getEnergyType(); public void basicInfo() { System.out.println( -- 2.54.0 From 4eb20505a21f9c500745c7f3ca5d573fc8f4852b Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 17:23:49 +0330 Subject: [PATCH 02/10] Class Car completed. --- src/main/java/org/model/Car.java | 38 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 74836b5..e61935c 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -17,25 +17,31 @@ 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" + //Override + abstract String getEnergyType(); - // TODO: Override showDetails() - // Print brand, model, year, mileage, and number of seats + //Override + public void showDetails() { + System.out.println(getBrand()); + System.out.println(getModel()); + System.out.println(getYear()); + System.out.println(getMileage()); + System.out.println(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" - */ + //Implements: + public boolean needsService(Vehicle v) { + double mileage = getMileage(); + if (mileage > 10000) {return true;} + else {return false;} + } + + public void performService() { + System.out.println("General car service completed"); + } } -- 2.54.0 From c3abc9ed0506f33a046f66e565d1165700cee235 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 17:29:39 +0330 Subject: [PATCH 03/10] Improved the codes in Class Car, --- src/main/java/org/model/Car.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index e61935c..0ddbec2 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -32,13 +32,12 @@ public abstract class Car extends Vehicle implements Serviceable { System.out.println(getMileage()); System.out.println(seats); } - + //Implements: public boolean needsService(Vehicle v) { - double mileage = getMileage(); - if (mileage > 10000) {return true;} - else {return false;} + double mileage = v.getMileage(); + return (mileage > 10000); } public void performService() { -- 2.54.0 From f96194275e4cad46b98b0bd661b028b3b58853b5 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 19:42:36 +0330 Subject: [PATCH 04/10] Class GasCar completed. --- src/main/java/org/model/Car.java | 4 +-- src/main/java/org/model/GasCar.java | 38 +++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 0ddbec2..07e1b72 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -21,10 +21,10 @@ public abstract class Car extends Vehicle implements Serviceable { this.seats = seats; } - //Override + @Override abstract String getEnergyType(); - //Override + @Override public void showDetails() { System.out.println(getBrand()); System.out.println(getModel()); diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..38d0a99 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -27,13 +27,37 @@ public class GasCar extends Car implements Refuelable { 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 + //Implement Refuelable + public void refuel(double amount) { + if (amount <= 0) { + System.out.println("Invalid amount!"); + return; + } + if (fuelLevel + amount > 100) {System.out.println("Invalid amount!");} + else {System.out.println("Refuelable!");} + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print fuel level and fuel type + @Override + public void showDetails() { + super.showDetails(); + System.out.println(fuelLevel); + System.out.println(fuelType); + } + + @Override + public boolean needsService(Vehicle v) { + double mileage = v.getMileage(); + return (mileage > 12000); + } + + @Override + public void performService() { + System.out.println("Engine oil changed"); + fuelLevel = 100; + } } -- 2.54.0 From 1251fd6b7619fd3aeb33f8135d4358773fc834a0 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 19:51:14 +0330 Subject: [PATCH 05/10] Class ElectricCar completed. --- src/main/java/org/model/ElectricCar.java | 36 +++++++++++++++++++----- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 2ee9bd8..8741382 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -27,13 +27,35 @@ public class ElectricCar extends Car implements Chargeable { this.chargeLevel = chargeLevel; } - // TODO: Override getEnergyType() → return "Electric" + @Override + public String getEnergyType() {return "Electric";} + + //Implement Chargeable + public void charge(double amount) { + if (amount <= 0) { + System.out.println("Invalid amount!"); + return; + } + if (chargeLevel + amount > 100) {System.out.println("Invalid amount!");} + else {System.out.println("Refuelable!");} + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print battery capacity and charge level + @Override + public void showDetails() { + super.showDetails(); + System.out.println(batteryCapacity); + System.out.println(chargeLevel); + } - // TODO: Implement charge(double amount) - // Validate negative - // Cap at 100 + @Override + public boolean needsService(Vehicle v) { + double mileage = v.getMileage(); + return (mileage > 8000); + } + + @Override + public void performService() { + System.out.println("Battery system checked"); + chargeLevel = 100; + } } -- 2.54.0 From fb217707760422105132d178a500667f1ff0e5c9 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 19:56:37 +0330 Subject: [PATCH 06/10] Class SportsCar completed. --- src/main/java/org/model/ElectricCar.java | 2 +- src/main/java/org/model/SportsCar.java | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 8741382..9aa7b5f 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -29,7 +29,7 @@ public class ElectricCar extends Car implements Chargeable { @Override public String getEnergyType() {return "Electric";} - + //Implement Chargeable public void charge(double amount) { if (amount <= 0) { diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..839f436 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(zeroToHundred); + } + + @Override + public boolean needsService(Vehicle v) { + double mileage = v.getMileage(); + return (mileage > 5000); + } + + @Override + public void performService() { + System.out.println("High-performance brake system checked"); + } } -- 2.54.0 From fe69260c633f35ec2bc7a4db75b5b60cffb37f35 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 20:08:15 +0330 Subject: [PATCH 07/10] Class VehicleInspector completed. --- src/main/java/org/util/VehicleInspector.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..f213bfb 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.Car; +import org.model.ElectricCar; +import org.model.GasCar; +import org.model.SportsCar; import org.model.Vehicle; /* @@ -11,12 +14,10 @@ import org.model.Vehicle; 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 SportsCar) {System.out.println("Check brakes and performance");} + else if (v instanceof ElectricCar) {System.out.println("Check battery system");} + else if (v instanceof GasCar) {System.out.println("Check engine and oil");} } } -- 2.54.0 From 570e1cd97ffb6ee5020d13eb4d50be3444402b23 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 20:30:21 +0330 Subject: [PATCH 08/10] The main class completed. --- src/main/java/org/Main.java | 156 +++++++++++------------------------- 1 file changed, 45 insertions(+), 111 deletions(-) diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..c53ff93 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,126 +1,60 @@ 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(...); - // ============================================================ + //Todo 1 + 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 + ); + //TODO 2 + Vehicle[] vehicles = {tesla, toyota, ferrari}; + //TODO 3 + 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). - // ============================================================ - - - - - - // ============================================================ - // 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 ==="); - // - // ============================================================ - - + //TODO 4 + for(int i = 0; i<3; i++) { + VehicleInspector.inspect(vehicles[i]); + } + //TODO 5 + Serviceable[] serviceables = {tesla, toyota, ferrari}; + //TODO 6 + for(int i = 0; i<3; i++) { + Vehicle v = (Vehicle) serviceables[i]; + if (serviceables[i].needsService(v)) { + System.out.println(((Vehicle)serviceables[i]).getBrand() + " " + ((Vehicle)serviceables[i]).getModel()); + serviceables[i].performService(); + } + else {System.out.println("The car doesn't need service!");} + System.out.println(" "); + } + //TODO 7 + System.out.println("=== Workshop Completed ==="); } } -- 2.54.0 From aca8cb51bf7508981a9cc0df8187659b2f928633 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 20:42:02 +0330 Subject: [PATCH 09/10] Class HybridCar (Bonus) completed. --- src/main/java/org/model/HybridCar.java | 71 ++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/main/java/org/model/HybridCar.java diff --git a/src/main/java/org/model/HybridCar.java b/src/main/java/org/model/HybridCar.java new file mode 100644 index 0000000..31aa32b --- /dev/null +++ b/src/main/java/org/model/HybridCar.java @@ -0,0 +1,71 @@ +package org.model; + +import org.behavior.Chargeable; +import org.behavior.Refuelable; + +public class HybridCar extends Car implements Chargeable, Refuelable { + + private int batteryCapacity; + private double chargeLevel; + private double fuelLevel; + private String fuelType; + + public HybridCar(String brand, String model, int year, + double mileage, int seats, + int batteryCapacity, double chargeLevel, + double fuelLevel, String fuelType) + { + super(brand, model, year, mileage, seats); + this.batteryCapacity = batteryCapacity; + this.chargeLevel = chargeLevel; + this.fuelLevel = fuelLevel; + this.fuelType = fuelType; + } + + @Override + public String getEnergyType() { + return ("Hybrid (Gas and Electric)"); + } + + //Implement Refuelable + public void refuel(double amount) { + if (amount <= 0) { + System.out.println("Invalid amount!"); + return; + } + if (fuelLevel + amount > 100) {System.out.println("Invalid amount!");} + else {System.out.println("Refuelable!");} + } + + //Implement Chargeable + public void charge(double amount) { + if (amount <= 0) { + System.out.println("Invalid amount!"); + return; + } + if (chargeLevel + amount > 100) {System.out.println("Invalid amount!");} + else {System.out.println("Refuelable!");} + } + + @Override + public void showDetails() { + super.showDetails(); + System.out.println(fuelLevel); + System.out.println(fuelType); + System.out.println(batteryCapacity); + System.out.println(chargeLevel); + } + + @Override + public boolean needsService(Vehicle v) { + double mileage = v.getMileage(); + return (mileage > 10000); + } + + @Override + public void performService() { + System.out.println("Engine oil changed and battery system checked"); + chargeLevel = 100; + fuelLevel = 100; + } +} \ No newline at end of file -- 2.54.0 From 0d7e9de9433e0a6e8a312486621219df64798029 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Tue, 28 Apr 2026 20:48:11 +0330 Subject: [PATCH 10/10] The main Class updated to check Class HybridCar. --- src/main/java/org/Main.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index c53ff93..7dd0b93 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,10 +1,7 @@ package org; import org.behavior.Serviceable; -import org.model.ElectricCar; -import org.model.GasCar; -import org.model.SportsCar; -import org.model.Vehicle; +import org.model.*; import org.util.VehicleInspector; public class Main { @@ -26,25 +23,31 @@ public class Main { 2, 3.9, "oil", 710 ); + HybridCar fun = new HybridCar( + "Aodi", "fun", 2026, 1000, + 5, 600, 40, 60, + "oil" + ); + //TODO 2 - Vehicle[] vehicles = {tesla, toyota, ferrari}; + Vehicle[] vehicles = {tesla, toyota, ferrari, fun}; //TODO 3 - for(int i = 0; i<3; i++) { + for(int i = 0; i<4; i++) { vehicles[i].basicInfo(); System.out.println(" "); } //TODO 4 - for(int i = 0; i<3; i++) { + for(int i = 0; i<4; i++) { VehicleInspector.inspect(vehicles[i]); } //TODO 5 - Serviceable[] serviceables = {tesla, toyota, ferrari}; + Serviceable[] serviceables = {tesla, toyota, ferrari, fun}; //TODO 6 - for(int i = 0; i<3; i++) { + for(int i = 0; i<4; i++) { Vehicle v = (Vehicle) serviceables[i]; if (serviceables[i].needsService(v)) { System.out.println(((Vehicle)serviceables[i]).getBrand() + " " + ((Vehicle)serviceables[i]).getModel()); -- 2.54.0