From 78137e32705bce5a9d6fa0c06e58353d6fc1c65c Mon Sep 17 00:00:00 2001 From: Matin Date: Mon, 27 Apr 2026 12:00:55 +0430 Subject: [PATCH 1/3] ElectricCar + car + Vehicle --- src/main/java/org/model/Car.java | 25 ++++++++++++++++ src/main/java/org/model/ElectricCar.java | 38 +++++++++++++++++++++++- src/main/java/org/model/Vehicle.java | 29 +++++++++++++++++- 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index cb81367..b9f7f44 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -19,12 +19,28 @@ public abstract class Car extends Vehicle implements Serviceable { double mileage, int seats) { // TODO: Call super constructor + super(brand , model , year , mileage ); this.seats = seats; } // TODO: Override getEnergyType() → return "Unknown" + @Override + public String getEnergyType() + { + return "Unknown" ; + } // TODO: Override showDetails() + @Override + public void showDetails() + { + System.out.println("brand : " + GetBrand) ; + System.out.println("model : " + GetModel ) ; + System.out.println("year : " + GetYear ) ; + System.out.println("mileage : " + GetMileage) ; + System.out.println("seats : " + seats) ; + + } /* * Implement Serviceable methods: @@ -37,4 +53,13 @@ public abstract class Car extends Vehicle implements Serviceable { * performService(): * - Print: "General car service completed" */ + @Override + public boolean needsService(Vehicle v) + { + return this.GetMileage() > 10000 ; + } + @Override void performService(){ + System.out.println("General car service completed") ; + } + } diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index ee9f5f9..07fa909 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -28,9 +28,45 @@ public class ElectricCar extends Car implements Chargeable { } // TODO: Override getEnergyType() → return "Electric" + public String getEnergyType() + { + return "Electric" ; + } // TODO: Override showDetails() - + @Override + public String showDetails() + { + super.showDetails() ; + System.out.println("battry capacity : " + batteryCapacity) ; + System.out.println("charge level : " + chargeLevel) ; + } + @Override + public void charge(double amount) + { + if (amount < 0 ) + { + System.out.println("No") ; + } + else + { + chargeLevel = chargeLevel + amount ; + if (chargeLevel > 100) + { + chargeLevel = 100 ; + } + } + } + public boolean needService(vehicle v) + { + return (this.Getmileage()> 8000) + } + @Override + public void performService() + { + System.out.println("Battery system checked") ; + chargeLevel = 100 ; + } // TODO: Implement charge(double amount) // Validate negative // Cap at 100 diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..6277458 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -21,12 +21,39 @@ public abstract class Vehicle { } // 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) + public void AddMileage(double km) + { + if (km < 0 ) + { + System.out.println("error !") ; + } + else + { + this.mileage = this.mileage + km ; + } + } // If km is negative → print error // Otherwise increase mileage // TODO: Declare abstract method getEnergyType() + public abstract String getEnergyType(); public void basicInfo() { System.out.println( -- 2.54.0 From d78e46b95718fda58f99737b80ccc14e615156dd Mon Sep 17 00:00:00 2001 From: Matin Date: Mon, 27 Apr 2026 14:02:52 +0430 Subject: [PATCH 2/3] another + bonus --- src/main/java/org/model/Car.java | 8 +- src/main/java/org/model/ElectricCar.java | 6 +- src/main/java/org/model/GasCar.java | 38 ++++++++++ src/main/java/org/model/HybridCar.java | 80 ++++++++++++++++++++ src/main/java/org/model/SportsCar.java | 21 +++++ src/main/java/org/util/VehicleInspector.java | 12 +++ 6 files changed, 159 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/model/HybridCar.java diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index b9f7f44..0f959c4 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -34,10 +34,10 @@ public abstract class Car extends Vehicle implements Serviceable { @Override public void showDetails() { - System.out.println("brand : " + GetBrand) ; - System.out.println("model : " + GetModel ) ; - System.out.println("year : " + GetYear ) ; - System.out.println("mileage : " + GetMileage) ; + System.out.println("brand : " + GetBrand()) ; + System.out.println("model : " + GetModel() ) ; + System.out.println("year : " + GetYear() ) ; + System.out.println("mileage : " + GetMileage()) ; System.out.println("seats : " + seats) ; } diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 07fa909..6ecd59a 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -26,6 +26,7 @@ public class ElectricCar extends Car implements Chargeable { this.batteryCapacity = batteryCapacity; this.chargeLevel = chargeLevel; } + @Override // TODO: Override getEnergyType() → return "Electric" public String getEnergyType() @@ -35,7 +36,7 @@ public class ElectricCar extends Car implements Chargeable { // TODO: Override showDetails() @Override - public String showDetails() + public void showDetails() { super.showDetails() ; System.out.println("battry capacity : " + batteryCapacity) ; @@ -57,6 +58,7 @@ public class ElectricCar extends Car implements Chargeable { } } } + @Override public boolean needService(vehicle v) { return (this.Getmileage()> 8000) @@ -65,7 +67,7 @@ public class ElectricCar extends Car implements Chargeable { public void performService() { System.out.println("Battery system checked") ; - chargeLevel = 100 ; + chargeLevel = 100 ; } // TODO: Implement charge(double amount) // Validate negative diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 58b3e45..1a67730 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -26,6 +26,44 @@ public class GasCar extends Car implements Refuelable { this.fuelLevel = fuelLevel; this.fuelType = fuelType; } + @Override + public boolean needsService(Vehicle v) + { + return this.GetMileage()> 12000 ; + } + @Override + public void performService() + { + System.out.println("Engine oil changed") ; + fuelLevel = 100 ; + } + @Override + public String getEnergyType() + { + return fuelType + " (Gas)" ; + } + @Override + public void refuel(double amount) + { + if (amount < 0) + { + System.out.println("no ! ") ; + } + else + { + fuelLevel = fuelLevel + amount ; + if (fuelLevel > 100) + fuelLevel = 100 ; + } + } + @Override + public void showDetails() + { + super.showDetails() ; + System.out.println("fuel level : " + fuelLevel) ; + System.out.println("fuel type : " + fuelType) ; + + } // TODO: Override getEnergyType() → return fuelType + " (Gas)" diff --git a/src/main/java/org/model/HybridCar.java b/src/main/java/org/model/HybridCar.java new file mode 100644 index 0000000..5da3abd --- /dev/null +++ b/src/main/java/org/model/HybridCar.java @@ -0,0 +1,80 @@ +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, + double fuelLevel, String fuelType, int batteryCapacity, double chargeLevel) { + + super(brand, model, year, mileage, seats); + this.fuelLevel = fuelLevel; + this.fuelType = fuelType; + this.batteryCapacity = batteryCapacity; + this.chargeLevel = chargeLevel; + } + @Override + + // TODO: Override getEnergyType() → return "Electric" + public String getEnergyType() + { + return "Electric + fuel : " + fuelType ; + } + @Override + public void showDetails() + { + super.showDetails() ; + System.out.println("battry capacity : " + batteryCapacity) ; + System.out.println("charge level : " + chargeLevel) ; + System.out.println("fuel level : " + fuelLevel) ; + System.out.println("fuel type : " + fuelType) ; + } + @Override + public void charge(double amount) + { + if (amount < 0 ) + { + System.out.println("No") ; + } + else + { + chargeLevel = chargeLevel + amount ; + if (chargeLevel > 100) + { + chargeLevel = 100 ; + } + } + } + @Override + public void refuel(double amount) + { + if (amount < 0) + { + System.out.println("no ! ") ; + } + else + { + fuelLevel = fuelLevel + amount ; + if (fuelLevel > 100) + fuelLevel = 100 ; + } + } + @Override + public boolean needsService(Vehicle v) + { + return this.GetMileage() > 10000 ; + } + @Override + public void performService() + { + System.out.println("Battery system checked") ; + chargeLevel = 100 ; + System.out.println("Engine oil changed") ; + fuelLevel = 100 ; + } +} \ No newline at end of file diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 2f8e459..a8ec66c 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -23,6 +23,27 @@ public class SportsCar extends GasCar { this.zeroToHundred = zeroToHundred; } + @Override + public boolean needsService(Vehicle v) + { + return this.GetMileage() > 5000 ; + } + @Override + public void performService() + { + System.out.println("High-performance brake system checked") ; + + } + @Override + public void showDetails() + { + System.out.println("*details*") + super.showDetails() ; + System.out.println("0 --> 100 " + zeroToHundred) ; + + + } + // TODO: Override showDetails() // Print header diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..f51df22 100644 --- a/src/main/java/org/util/VehicleInspector.java +++ b/src/main/java/org/util/VehicleInspector.java @@ -13,6 +13,18 @@ public class VehicleInspector { public static void inspect(Vehicle v) { v.basicInfo(); + 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") ; + } // TODO: // If ElectricCar → print "Check battery system" -- 2.54.0 From 2547e8eef1b5c0dd4f65627dd48ba9989731be90 Mon Sep 17 00:00:00 2001 From: Matin Date: Tue, 28 Apr 2026 10:07:50 +0430 Subject: [PATCH 3/3] =?UTF-8?q?matin=20mortazavi=20/=20=20I=20debugged=20t?= =?UTF-8?q?he=20code.=20The=20issue=20was=20that=20it=20couldn=E2=80=99t?= =?UTF-8?q?=20recognize=20the=20file=20paths?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/{main/java => }/org/Main.java | 44 +++++++++++++++++++ .../java => }/org/behavior/Chargeable.java | 0 .../java => }/org/behavior/Refuelable.java | 0 .../java => }/org/behavior/Serviceable.java | 0 src/{main/java => }/org/model/Car.java | 9 ++-- .../java => }/org/model/ElectricCar.java | 4 +- src/{main/java => }/org/model/GasCar.java | 6 +++ src/{main/java => }/org/model/HybridCar.java | 8 ++++ src/{main/java => }/org/model/SportsCar.java | 6 +-- src/{main/java => }/org/model/Vehicle.java | 0 .../java => }/org/util/VehicleInspector.java | 2 +- 11 files changed, 70 insertions(+), 9 deletions(-) rename src/{main/java => }/org/Main.java (74%) rename src/{main/java => }/org/behavior/Chargeable.java (100%) rename src/{main/java => }/org/behavior/Refuelable.java (100%) rename src/{main/java => }/org/behavior/Serviceable.java (100%) rename src/{main/java => }/org/model/Car.java (85%) rename src/{main/java => }/org/model/ElectricCar.java (94%) rename src/{main/java => }/org/model/GasCar.java (95%) rename src/{main/java => }/org/model/HybridCar.java (94%) rename src/{main/java => }/org/model/SportsCar.java (88%) rename src/{main/java => }/org/model/Vehicle.java (100%) rename src/{main/java => }/org/util/VehicleInspector.java (97%) diff --git a/src/main/java/org/Main.java b/src/org/Main.java similarity index 74% rename from src/main/java/org/Main.java rename to src/org/Main.java index 7a3d8c8..589a7df 100644 --- a/src/main/java/org/Main.java +++ b/src/org/Main.java @@ -1,4 +1,10 @@ package org; +import org.model.*; +import org.util.VehicleInspector; +import org.model.Vehicle; +import org.util.VehicleInspector; + +import org.behavior.Serviceable; public class Main { public static void main(String[] args) { @@ -84,6 +90,10 @@ public class Main { + + + + // ============================================================ // TODO 6: // Loop through the Serviceable[] array: @@ -118,9 +128,43 @@ public class Main { // // ============================================================ + Serviceable tesla = new ElectricCar("Tesla", "Model 3", 2023, 5000, 5, 75, 80); + Serviceable honda = new GasCar("Honda", "Civic", 2022, 15000, 5, 50, "Gasoline"); + Serviceable porsche = new SportsCar("Porsche", "911", 2023, 2000, 2, 60, "Gasoline", 3.5); + Vehicle[] vehicles = {(Vehicle) tesla, (Vehicle) honda, (Vehicle) porsche}; + for (Vehicle v : vehicles) { + v.basicInfo(); + System.out.println(); + } + + + for (Vehicle v : vehicles) { + + VehicleInspector.inspect(v); + } + + + Serviceable[] serviceables = { tesla, honda, porsche }; + + + for (Serviceable s : serviceables) { + Vehicle v = (Vehicle) s; + if (s.needsService(v)) { + System.out.println(v.GetBrand() + " " + v.GetBrand() + " needs service."); + 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/behavior/Chargeable.java b/src/org/behavior/Chargeable.java similarity index 100% rename from src/main/java/org/behavior/Chargeable.java rename to src/org/behavior/Chargeable.java diff --git a/src/main/java/org/behavior/Refuelable.java b/src/org/behavior/Refuelable.java similarity index 100% rename from src/main/java/org/behavior/Refuelable.java rename to src/org/behavior/Refuelable.java diff --git a/src/main/java/org/behavior/Serviceable.java b/src/org/behavior/Serviceable.java similarity index 100% rename from src/main/java/org/behavior/Serviceable.java rename to src/org/behavior/Serviceable.java diff --git a/src/main/java/org/model/Car.java b/src/org/model/Car.java similarity index 85% rename from src/main/java/org/model/Car.java rename to src/org/model/Car.java index 0f959c4..b1c922d 100644 --- a/src/main/java/org/model/Car.java +++ b/src/org/model/Car.java @@ -11,7 +11,7 @@ package org.model; import org.behavior.Serviceable; -public abstract class Car extends Vehicle implements Serviceable { +public abstract class Car extends org.model.Vehicle implements Serviceable { private int seats; @@ -54,11 +54,14 @@ public abstract class Car extends Vehicle implements Serviceable { * - Print: "General car service completed" */ @Override - public boolean needsService(Vehicle v) + public boolean needsService(org.model.Vehicle v) { return this.GetMileage() > 10000 ; } - @Override void performService(){ + + public abstract boolean needService(org.model.Vehicle v); + + @Override public void performService(){ System.out.println("General car service completed") ; } diff --git a/src/main/java/org/model/ElectricCar.java b/src/org/model/ElectricCar.java similarity index 94% rename from src/main/java/org/model/ElectricCar.java rename to src/org/model/ElectricCar.java index 6ecd59a..e85eaa4 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/org/model/ElectricCar.java @@ -59,9 +59,9 @@ public class ElectricCar extends Car implements Chargeable { } } @Override - public boolean needService(vehicle v) + public boolean needService(org.model.Vehicle v) { - return (this.Getmileage()> 8000) + return (this.GetMileage()> 8000); } @Override public void performService() diff --git a/src/main/java/org/model/GasCar.java b/src/org/model/GasCar.java similarity index 95% rename from src/main/java/org/model/GasCar.java rename to src/org/model/GasCar.java index 1a67730..7d5cef0 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/org/model/GasCar.java @@ -31,6 +31,12 @@ public class GasCar extends Car implements Refuelable { { return this.GetMileage()> 12000 ; } + + @Override + public boolean needService(Vehicle v) { + return false; + } + @Override public void performService() { diff --git a/src/main/java/org/model/HybridCar.java b/src/org/model/HybridCar.java similarity index 94% rename from src/main/java/org/model/HybridCar.java rename to src/org/model/HybridCar.java index 5da3abd..1507fe3 100644 --- a/src/main/java/org/model/HybridCar.java +++ b/src/org/model/HybridCar.java @@ -1,6 +1,8 @@ package org.model; import org.behavior.Chargeable; import org.behavior.Refuelable; +import org.model.Vehicle; + public class HybridCar extends Car implements Chargeable , Refuelable { private int batteryCapacity; @@ -34,6 +36,12 @@ public class HybridCar extends Car implements Chargeable , Refuelable { System.out.println("fuel level : " + fuelLevel) ; System.out.println("fuel type : " + fuelType) ; } + + @Override + public boolean needService(Vehicle v) { + return false; + } + @Override public void charge(double amount) { diff --git a/src/main/java/org/model/SportsCar.java b/src/org/model/SportsCar.java similarity index 88% rename from src/main/java/org/model/SportsCar.java rename to src/org/model/SportsCar.java index a8ec66c..b1173ae 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/org/model/SportsCar.java @@ -9,7 +9,7 @@ package org.model; * Print "High-performance brake system checked" */ -public class SportsCar extends GasCar { +public class SportsCar extends org.model.GasCar { private double zeroToHundred; @@ -24,7 +24,7 @@ public class SportsCar extends GasCar { this.zeroToHundred = zeroToHundred; } @Override - public boolean needsService(Vehicle v) + public boolean needsService(org.model.Vehicle v) { return this.GetMileage() > 5000 ; } @@ -37,7 +37,7 @@ public class SportsCar extends GasCar { @Override public void showDetails() { - System.out.println("*details*") + System.out.println("*details*"); super.showDetails() ; System.out.println("0 --> 100 " + zeroToHundred) ; diff --git a/src/main/java/org/model/Vehicle.java b/src/org/model/Vehicle.java similarity index 100% rename from src/main/java/org/model/Vehicle.java rename to src/org/model/Vehicle.java diff --git a/src/main/java/org/util/VehicleInspector.java b/src/org/util/VehicleInspector.java similarity index 97% rename from src/main/java/org/util/VehicleInspector.java rename to src/org/util/VehicleInspector.java index f51df22..5c8ec7e 100644 --- a/src/main/java/org/util/VehicleInspector.java +++ b/src/org/util/VehicleInspector.java @@ -1,6 +1,6 @@ package org.util; -import org.*; +import org.model.*; import org.model.Vehicle; /* -- 2.54.0