diff --git a/.idea/misc.xml b/.idea/misc.xml index fdc35ea..7f808fd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 53a8a3d..1d6559c 100644 --- a/pom.xml +++ b/pom.xml @@ -13,5 +13,18 @@ 21 UTF-8 + + + + org.apache.maven.plugins + maven-compiler-plugin + + 25 + 25 + --enable-preview + + + + \ No newline at end of file diff --git a/src/main/java/org/Main.java b/src/main/java/org/Main.java index 7a3d8c8..c3ac5dc 100644 --- a/src/main/java/org/Main.java +++ b/src/main/java/org/Main.java @@ -1,4 +1,9 @@ package org; +import org.model.*; +import org.behavior.Serviceable; +import org.model.ElectricCar; +import org.model.Vehicle; +import org.util.VehicleInspector; public class Main { public static void main(String[] args) { @@ -16,8 +21,20 @@ public class Main { // • 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 + ); @@ -31,7 +48,7 @@ public class Main { // subclasses (ElectricCar, GasCar, SportsCar) are stored // as their parent type (Vehicle). // ============================================================ - + Vehicle[] vehicles ={tesla,toyota,ferrari}; @@ -46,7 +63,10 @@ public class Main { // Demonstrate that all subclasses share the same Vehicle // behavior and can call inherited methods. // ============================================================ - + for(Vehicle v : vehicles){ + v.basicInfo(); + System.out.println(); + } @@ -62,7 +82,9 @@ public class Main { // • Show subclass‑specific inspection messages // ============================================================ - + VehicleInspector.inspect(tesla); + VehicleInspector.inspect(toyota); + VehicleInspector.inspect(ferrari); @@ -79,7 +101,18 @@ public class Main { // Vehicle v = (Vehicle) s; // // ============================================================ - + Serviceable[] serviceables = {tesla,toyota,ferrari }; + for(Serviceable s : serviceables){ + Vehicle v = (Vehicle) s; + if (s.needsService(v)){ + System.out.println("Brand: "+v.getBrand()+"Model: "+v.getModel()); + s.performService(); + } + else{ + System.out.println("No support"); + } + System.out.println(); + } @@ -118,7 +151,7 @@ public class Main { // // ============================================================ - + System.out.println("=== Workshop Completed ==="); diff --git a/src/main/java/org/model/Car.java b/src/main/java/org/model/Car.java index 74836b5..83008d5 100644 --- a/src/main/java/org/model/Car.java +++ b/src/main/java/org/model/Car.java @@ -20,13 +20,22 @@ public abstract class Car extends Vehicle implements Serviceable { // TODO: Call super constructor this.seats = seats; + super(brand,model,year,mileage); } // 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.println( + getYear()+ " " + getBrand() + " " + getModel() + + " | Mileage: " + getMileage() + + " | Seats: " + seats + ); + } /* * Implement Serviceable methods: * @@ -38,4 +47,12 @@ public abstract class Car extends Vehicle implements Serviceable { * performService(): * - Print: "General car service completed" */ + + public boolean needsService(Vehicle v){ + return v.getMileage()>10000; + } + + public void performService(Vehicle v){ + 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 2ee9bd8..3c054ac 100644 --- a/src/main/java/org/model/ElectricCar.java +++ b/src/main/java/org/model/ElectricCar.java @@ -28,12 +28,35 @@ 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.println("Battery Capacity: " + batteryCapacity+"Charge Level: "+chargeLevel); + } // TODO: Implement charge(double amount) // Validate negative // Cap at 100 + public void charge(double amount) { + if(0100) + this.chargeLevel = 100; + } + } + + @Override + public boolean needsService(Vehicle v) { + return v.getMileage()>8000; + } + @Override + public void performService() { + System.out.println("Battery system checked"); + chargeLevel =100; + } } diff --git a/src/main/java/org/model/GasCar.java b/src/main/java/org/model/GasCar.java index 2109f93..c92d41f 100644 --- a/src/main/java/org/model/GasCar.java +++ b/src/main/java/org/model/GasCar.java @@ -28,12 +28,37 @@ 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 + public void refuel(double amount){ + if(amount > 0){ + this.fuelLevel += amount; + if(this.fuelLevel > 100) + this.fuelLevel = 100; + } + } // TODO: Override showDetails() // Call super.showDetails() // Print fuel level and fuel type + @Override + public void showDetails() { + super.showDetails(); + System.out.println("Fuel Level: " + this.fuelLevel +" "+"Fuel Type: " + this.fuelType); + } + + @Override + public boolean needsService(Vehicle v) { + return v.getMileage()>12000; + } + @Override + public void performService() { + System.out.println("Engine oil changed"); + fuelLevel =100; + } } diff --git a/src/main/java/org/model/HybridCar.java b/src/main/java/org/model/HybridCar.java new file mode 100644 index 0000000..97359da --- /dev/null +++ b/src/main/java/org/model/HybridCar.java @@ -0,0 +1,41 @@ +package org.model; + +import org.behavior.Chargeable; +import org.behavior.Refuelable; +import org.behavior.Serviceable; + +public class HybridCar extends Car implements Refuelable, Chargeable { + private double battery_level; + private double fuel_level; + @Override + public boolean needsService(Vehicle v) { + return v.getMileage()>10000; + } + @Override + public void performService() { + System.out.println("Engine oil changed and battery system checked"); + fuel_level =100; + battery_level=100; + } + public HybridCar(String brand, String model, int year, + double mileage, int seats, + double battery_level, double fuel_level) { + super(brand, model, year, mileage, seats); + this.battery_level = battery_level; + this.fuel_level = fuel_level; + } + public void charge(double amount) { + if(0100) + this.battery_level = 100; + } + } + public void refuel(double amount) { + if(0100) + this.fuel_level = 100; + } + } +} diff --git a/src/main/java/org/model/SportsCar.java b/src/main/java/org/model/SportsCar.java index 25f5df9..edbffdf 100644 --- a/src/main/java/org/model/SportsCar.java +++ b/src/main/java/org/model/SportsCar.java @@ -27,4 +27,18 @@ 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: "+zeroToHundred); + } + @Override + public void performService() { + System.out.println("High-performance brake system checked"); + } + @Override + public boolean needsService(Vehicle v) { + return v.getMileage() > 5000; + } + } diff --git a/src/main/java/org/model/Vehicle.java b/src/main/java/org/model/Vehicle.java index 70615a9..2b758a3 100644 --- a/src/main/java/org/model/Vehicle.java +++ b/src/main/java/org/model/Vehicle.java @@ -21,12 +21,32 @@ 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) + public void addMileage(double km){ + if(km<0){ + System.out.println("error"); + return; + } + 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( diff --git a/src/main/java/org/util/VehicleInspector.java b/src/main/java/org/util/VehicleInspector.java index c83c420..0f38788 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; /* @@ -18,5 +21,19 @@ public class VehicleInspector { // If ElectricCar → print "Check battery system" // If SportsCar → print "Check brakes and performance" // If GasCar → print "Check engine and oil" + /* + switch (v) { + case ElectricCar electricCar -> System.out.println("Check battery system"); + case SportsCar sportsCar -> System.out.println("Check brakes and performance"); + case GasCar gasCar -> System.out.println("Check engine and oil"); + default -> { + } + } + */ + + if(v instanceof GasCar){System.out.println("Check engine and oil");} + else if (v instanceof SportsCar){System.out.println("Check brakes and performance");} + else if (v instanceof ElectricCar){System.out.println("Check battery system");} + } }