package org.model; import org.behavior.Chargeable; import org.behavior.Refuelable; public class HybridCar extends Car implements Chargeable, Refuelable { private double fuelLevel; private final String fuelType; private final 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 "Hybrid (Electric + " + fuelType + ")"; } @Override public void showDetails() { super.showDetails(); System.out.println( "Fuel level: " + fuelLevel + "| Fuel type: " + fuelType ); System.out.println( "Battery capacity: " + batteryCapacity + "| Charge level: " + chargeLevel ); } @Override public void charge(double amount) { if (amount <= 0) { System.out.println("An error occurred while charging the vehicle, value must be bigger than zero, " + amount + " is not"); } if (chargeLevel + amount > 100) { System.out.println("An error occurred while charging the vehicle, by adding this amount: " + amount + " vehicle's charge level exceeds battery capacity"); } chargeLevel += amount; } @Override public void refuel(double amount) { if (amount <= 0) { System.out.println("An error occurred while refueling the vehicle, value must be bigger than zero, " + amount + " is not"); } if (fuelLevel + amount > 100) { System.out.println("An error occurred while refueling the vehicle, by adding this amount: " + amount + " vehicle's charge level exceeds battery capacity"); } fuelLevel += amount; } @Override public void performService() { super.performService(); System.out.println("Engine oil changed and battery system checked"); fuelLevel = 100; chargeLevel = 100; } @Override public boolean needsService(Vehicle v) { return getMileage() > 10000; } }