From a2d81cd924126b443e1023bf712ce1a190680b88 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 28 Apr 2026 23:20:07 +0330 Subject: [PATCH 1/8] Complete Vehicle class --- .idea/misc.xml | 2 +- src/main/java/org/model/Vehicle.java | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index fdc35ea..0c04b52 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..b664a1a 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -22,11 +22,30 @@ public abstract class Vehicle { // TODO: Create getters for all fields + public String getBrand() { + return brand; + } + public String getModel() { + return model; + } + public int getYear(){ + return year; + } + public double getMileage() { + return mileage; + } + // TODO: Implement addMileage(double km) - // If km is negative → print error - // Otherwise increase mileage + public void addMileage(double km){ + if(km < 0){ + System.out.println("Error: can\'t add negetive number!"); + return; + } + mileage += km; + } // TODO: Declare abstract method getEnergyType() + public abstract String getEnergyType(); public void basicInfo() { System.out.println( From c82acadfb3a021f392e88f70e70bcd77352f2272 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 28 Apr 2026 23:32:05 +0330 Subject: [PATCH 2/8] Complete Car class --- src/main/java/org/model/Car.java | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 74836b5..bb1d44e 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -19,13 +19,23 @@ 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() - // Print brand, model, year, mileage, and number of seats + @Override + public void showDetails(){ + System.out.printf("Brand: %s, Model: %s, Year: %s, Mileage: %s\n", + getBrand(), getModel(), getYear(), getMileage()); + } /* * Implement Serviceable methods: @@ -38,4 +48,17 @@ public abstract class Car extends Vehicle implements Serviceable { * performService(): * - Print: "General car service completed" */ + + @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"); + } } From 3f68c299d9b6ba4c24a1847faa572d517dfaee19 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 28 Apr 2026 23:42:16 +0330 Subject: [PATCH 3/8] Complete GasCar class --- src/main/java/org/model/GasCar.java | 31 +++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..ea6bc83 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -28,12 +28,35 @@ public class GasCar extends Car implements Refuelable { } // TODO: Override getEnergyType() → return fuelType + " (Gas)" + @Override + public String getEnergyType() { + return fuelType + " (Gas)"; + } + // TODO: Implement refuel(double amount) - // Validate amount - // Cap at 100 + @Override + public void refuel(double amount) { + fuelLevel = 100; + } + // TODO: Override showDetails() - // Call super.showDetails() - // Print fuel level and fuel type + @Override + public void showDetails() { + super.showDetails(); + System.out.printf(", Fuel Type: %s, Fuel Level: %s\n", + fuelType, fuelLevel); + } + + @Override + public boolean needsService(Vehicle v) { + return v.getMileage() > 12000; + } + + @Override + public void performService() { + System.out.println("Engine oil changed"); + fuelLevel = 100; + } } From cbf0eaf98c92682c3bb3f26cee8db848d6ac5274 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 28 Apr 2026 23:48:01 +0330 Subject: [PATCH 4/8] fix: debug refuel method in GasCar class --- src/main/java/org/model/GasCar.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index ea6bc83..77c6d70 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -37,7 +37,9 @@ public class GasCar extends Car implements Refuelable { // TODO: Implement refuel(double amount) @Override public void refuel(double amount) { - fuelLevel = 100; + if(fuelLevel + amount <= 100){ + fuelLevel += amount; + } } From 161187a478c324b047e311521ed26dc0bed414c5 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 28 Apr 2026 23:54:47 +0330 Subject: [PATCH 5/8] Complete ElectricCar class --- src/main/java/org/model/ElectricCar.java | 36 +++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/model/ElectricCar.java b/src/main/java/org/model/ElectricCar.java index 2ee9bd8..2f50361 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -28,12 +28,40 @@ public class ElectricCar extends Car implements Chargeable { } // TODO: Override getEnergyType() → return "Electric" + @Override + public String getEnergyType() { + return "Electric"; + } + // TODO: Override showDetails() - // Call super.showDetails() - // Print battery capacity and charge level + @Override + public void showDetails() { + super.showDetails(); + System.out.printf(", Battery Capacity: %s, Charge Level: %s", + batteryCapacity, chargeLevel); + } // TODO: Implement charge(double amount) - // Validate negative - // Cap at 100 + @Override + public void charge(double amount) { + if(amount < 0){ + System.out.println("Error: can\'t add negative number!"); + return; + } + if(chargeLevel + amount <= 100){ + chargeLevel += amount; + } + } + + @Override + public boolean needsService(Vehicle v) { + return getMileage() > 8000; + } + + @Override + public void performService() { + System.out.println("Battery system checked"); + chargeLevel = 100; + } } From 305f719836a87b10d7fe74f55cb140b734c40c07 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 28 Apr 2026 23:58:13 +0330 Subject: [PATCH 6/8] Complete SportsCar class --- src/main/java/org/model/SportsCar.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..1cc8459 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -25,6 +25,19 @@ public class SportsCar extends GasCar { } // TODO: Override showDetails() - // Call super.showDetails() - // Print acceleration time + @Override + public void showDetails() { + super.showDetails(); + System.out.printf(", Acceleration Time (0-100): %s", zeroToHundred); + } + + @Override + public boolean needsService(Vehicle v) { + return getMileage() > 5000; + } + + @Override + public void performService() { + System.out.println("High-performance brake system checked"); + } } From 9182bba222d3f629ccb9cf0cb330023adec20872 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Wed, 29 Apr 2026 00:32:23 +0330 Subject: [PATCH 7/8] Complete inspector and an example scenario --- src/main/java/org/Main.java | 43 +++++++++++++++++--- src/main/java/org/util/VehicleInspector.java | 14 +++++++ 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..35dc502 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,5 +1,12 @@ 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) { @@ -17,8 +24,17 @@ public class Main { // ElectricCar tesla = new ElectricCar(...); // ============================================================ + ElectricCar tesla = new ElectricCar( + "Telsa", "Model S", 2022, 1000, + 4, 500, 80); + GasCar RR = new GasCar( + "Rolls Royce", "Phantom", 2018, 85000, + 5, 50, "Petrol"); + SportsCar porsche = new SportsCar( + "Porsche", "GT3-RS", 2024, 500, + 2, 70, "Petrol", 3.9); // ============================================================ @@ -32,7 +48,7 @@ public class Main { // as their parent type (Vehicle). // ============================================================ - + Vehicle[] vehicles = {tesla, RR, porsche}; @@ -47,7 +63,10 @@ public class Main { // behavior and can call inherited methods. // ============================================================ - + for(Vehicle v : vehicles){ + v.basicInfo(); + System.out.println(); + } @@ -62,7 +81,9 @@ public class Main { // • Show subclass‑specific inspection messages // ============================================================ - + for(Vehicle v : vehicles){ + VehicleInspector.inspect(v); + } @@ -80,7 +101,7 @@ public class Main { // // ============================================================ - + Serviceable[] serviceables = {tesla, RR, porsche}; @@ -106,7 +127,17 @@ public class Main { // Add blank lines between each item for readability. // ============================================================ - + for(Serviceable s : serviceables){ + Vehicle v = (Vehicle) s; + if(s.needsService(v)){ + System.out.printf("Brand: %s, Model: %s\n", v.getBrand(), v.getModel()); + s.performService(); + System.out.println(); + } + else{ + System.out.println("The car does not need service\n"); + } + } @@ -118,7 +149,7 @@ public class Main { // // ============================================================ - + System.out.println("=== Workshop Completed ==="); diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..7eb7966 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; /* @@ -16,7 +19,18 @@ public class VehicleInspector { // TODO: // If ElectricCar → print "Check battery system" + if(v instanceof ElectricCar){ + System.out.println( "Check battery system"); + } + // If SportsCar → print "Check brakes and performance" + if(v instanceof SportsCar){ + System.out.println("Check brakes and performance"); + } + // If GasCar → print "Check engine and oil" + if(v instanceof GasCar){ + System.out.println("Check engine and oil"); + } } } From 79bb92299c67e2fce2ba0afce5328b590e2209b7 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Wed, 29 Apr 2026 00:47:19 +0330 Subject: [PATCH 8/8] Add HybridCar class (Bonus) --- src/main/java/org/model/HybridCar.java | 63 ++++++++++++++++++++++++++ 1 file changed, 63 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..8c547c9 --- /dev/null +++ b/src/main/java/org/model/HybridCar.java @@ -0,0 +1,63 @@ +package org.model; + +import org.behavior.Chargeable; +import org.behavior.Refuelable; + +public class HybridCar extends Car implements Refuelable, Chargeable { + private double fuelLevel; + private String fuelType; + private int batteryCapacity; + private double chargeLevel; + + 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 + public String getEnergyType() { + return "Gas & Electricity"; + } + + @Override + public void refuel(double amount) { + if(fuelLevel + amount <= 100){ + fuelLevel += amount; + } + } + + @Override + public void charge(double amount) { + if(amount < 0){ + System.out.println("Error: can\'t add negative number!"); + return; + } + if(chargeLevel + amount <= 100){ + chargeLevel += amount; + } + } + + @Override + public void showDetails() { + super.showDetails(); + System.out.printf(", Fuel Type: %s, Fuel Level: %s, Battery Capacity: %s, Charge Level: %s\n", + fuelType, fuelLevel, batteryCapacity, chargeLevel); + } + + @Override + public boolean needsService(Vehicle v) { + return v.getMileage() > 10000; + } + + @Override + public void performService() { + System.out.println("Engine oil changed and battery system checked"); + fuelLevel = 100; + chargeLevel = 100; + } +}