From e1d4003167ba5397831e7eef574e232508671c42 Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 18:28:20 +0330 Subject: [PATCH 1/8] complete Vehicle class --- src/main/java/org/model/Vehicle.java | 33 +++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..4b57e42 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -20,13 +20,36 @@ public abstract class Vehicle { this.mileage = mileage; } - // 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) + { + throw new IllegalArgumentException("Mileage cannot be negative!"); + } + else + { + mileage += km; + } + } - // TODO: Declare abstract method getEnergyType() + public abstract String getEnergyType(); public void basicInfo() { System.out.println( From 963101b8879c1fc5735f2baa7e581ad4c6b86463 Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 18:36:12 +0330 Subject: [PATCH 2/8] complete Car class --- src/main/java/org/model/Car.java | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 74836b5..c7251d6 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -18,15 +18,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" + @Override + public String getEnergyType() + { + return "Unknown"; + } - // TODO: Override showDetails() - // Print brand, model, year, mileage, and number of seats + @Override + public void showDetails() + { + basicInfo(); + System.out.println("number of seats: " + this.seats); + } + public boolean needsService(Vehicle v) + { + if (v.getMileage() > 10000) + { + return true; + } + return false; + } + + public void performService() + { + System.out.println("General car service completed"); + } /* * Implement Serviceable methods: * From 15a02b82aa9d6f8577d7c1def7a5bc4d8a767f6c Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 18:43:03 +0330 Subject: [PATCH 3/8] complete GasCar class --- src/main/java/org/model/GasCar.java | 50 +++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..a129106 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -27,13 +27,49 @@ 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 + public void refuel(double amount) + { + if (amount < 0) + { + System.out.println("Cannot refuel negative amount!"); + return; + } + this.fuelLevel += amount; + if (this.fuelLevel > 100) + { + this.fuelLevel = 100; + } + System.out.println("Refueled. Current fuel level: " + this.fuelLevel); + } + + @Override + public void showDetails() + { + super.showDetails(); + System.out.println("fuel type: " + this.fuelType + " | fuel level: " + this.fuelLevel); + } + + @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; + } - // TODO: Override showDetails() - // Call super.showDetails() - // Print fuel level and fuel type } From de3e8f4783c1d8c39b8b00955c272202b28abdd1 Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 18:54:13 +0330 Subject: [PATCH 4/8] complete ElectricCar class --- 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..2afaf9e 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" + @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.println("battery capacity: " + this.batteryCapacity + " | charge level: " + this.chargeLevel); + } + + public void charge(double amount) { + if (amount < 0) { + System.out.println("Cannot charge negative amount!"); + return; + } + this.chargeLevel += amount; + if (this.chargeLevel > 100) { + this.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"); + this.chargeLevel = 100; + } - // TODO: Implement charge(double amount) - // Validate negative - // Cap at 100 } From c4b7b55570d2d05c1802b70946550bc82b97117f Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 19:01:32 +0330 Subject: [PATCH 5/8] complete SportsCar class --- src/main/java/org/model/SportsCar.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..1a6866d 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -27,4 +27,27 @@ public class SportsCar extends GasCar { // TODO: Override showDetails() // Call super.showDetails() // Print acceleration time + @Override + public void showDetails() + { + super.showDetails(); + System.out.println("acceleration time: " + this.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"); + } + } From f406c544018413e0854cb34aadf3bd3f3ebb94a6 Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 19:14:41 +0330 Subject: [PATCH 6/8] complete VehicleInspector class --- src/main/java/org/model/SportsCar.java | 3 --- src/main/java/org/util/VehicleInspector.java | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 1a6866d..ef932ac 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -24,9 +24,6 @@ public class SportsCar extends GasCar { this.zeroToHundred = zeroToHundred; } - // TODO: Override showDetails() - // Call super.showDetails() - // Print acceleration time @Override public void showDetails() { diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..ff36bd6 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; /* @@ -14,9 +17,17 @@ 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 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"); + } } } From a4be227f1c5e353c5f6554b757364079a120e53d Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 21:06:51 +0330 Subject: [PATCH 7/8] complete Main class --- src/main/java/org/Main.java | 154 ++++++++++-------------------------- 1 file changed, 42 insertions(+), 112 deletions(-) diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..73dfe00 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,126 +1,56 @@ 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, + 5, 100, 20); + + GasCar toyota = new GasCar("Toyota", "Corolla", 2018, 13000, + 5, 50, "Petrol"); + + SportsCar ferrari = new SportsCar("Ferrari", "F8 Tributo", 2021, 8000, + 2, 100, "Petrol", 2.9); + Vehicle[] vehicles = {tesla, toyota, ferrari}; + for (Vehicle v : vehicles) + { + v.basicInfo(); + System.out.println(); + } + for (Vehicle v : vehicles) + { + VehicleInspector.inspect(v); + } - // ============================================================ - // 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 ==="); - // - // ============================================================ - - - + Serviceable[] serviceables = {tesla, toyota, ferrari}; + for (Serviceable s : serviceables) + { + Vehicle v = (Vehicle) s; + if (s.needsService(v)) + { + System.out.println(v.getBrand() + " " + v.getModel()); + s.performService(); + } + else + { + System.out.println(v.getBrand() + " " + v.getModel() + " does not need service."); + } + System.out.println(); + } + System.out.println("=== Workshop Completed ==="); } } From 77bc77c1ddb9ccb80662c6050171d5980ad200f0 Mon Sep 17 00:00:00 2001 From: Arefe Date: Mon, 27 Apr 2026 21:22:47 +0330 Subject: [PATCH 8/8] create and complete HybridCar class --- src/main/java/org/model/HybridCar.java | 62 ++++++++++++++++++++++++++ 1 file changed, 62 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..bdf3b09 --- /dev/null +++ b/src/main/java/org/model/HybridCar.java @@ -0,0 +1,62 @@ +package org.model; + +import org.behavior.Chargeable; +import org.behavior.Refuelable; + +public class HybridCar extends Car implements Chargeable, Refuelable{ + private double chargeLevel; + private double fuelLevel; + + public HybridCar(String brand, String model, int year, + double mileage, int seats, + double fuelLevel, double chargeLevel) { + + super(brand, model, year, mileage, seats); + this.fuelLevel = fuelLevel; + this.chargeLevel = chargeLevel; + } + + @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"); + this.chargeLevel = 100; + this.fuelLevel = 100; + } + + public void charge(double amount) { + if (amount < 0) { + System.out.println("Cannot charge negative amount!"); + return; + } + this.chargeLevel += amount; + if (this.chargeLevel > 100) { + this.chargeLevel = 100; + } + } + + public void refuel(double amount) + { + if (amount < 0) + { + System.out.println("Cannot refuel negative amount!"); + return; + } + this.fuelLevel += amount; + if (this.fuelLevel > 100) + { + this.fuelLevel = 100; + } + System.out.println("Refueled. Current fuel level: " + this.fuelLevel); + } +}