Загрузка данных
// АБСТРАКТНЫЙ КЛАСС
abstract class Vehicle {
// Может иметь состояние (поля)
protected String brand;
protected int year;
private int id; // private тоже можно
// Конструктор!
public Vehicle(String brand, int year) {
this.brand = brand;
this.year = year;
this.id = generateId();
}
// Может иметь конкретные методы
public void displayInfo() {
System.out.println(brand + " (" + year + ")");
}
// Может иметь protected методы
protected int generateId() {
return (int)(Math.random() * 1000);
}
// Абстрактные методы (должны быть реализованы)
public abstract void startEngine();
public abstract void stopEngine();
}
// ИНТЕРФЕЙС
interface ElectricVehicle {
// Только константы (public static final по умолчанию)
int BATTERY_WARRANTY_YEARS = 8;
// Абстрактные методы (public abstract по умолчанию)
void chargeBattery();
int getBatteryLevel();
// default метод (Java 8+)
default void showBatteryStatus() {
System.out.println("Battery level: " + getBatteryLevel() + "%");
}
// static метод (Java 8+)
static void printWarranty() {
System.out.println("Warranty: " + BATTERY_WARRANTY_YEARS + " years");
}
}
interface AutonomousDriving {
void enableAutopilot();
void disableAutopilot();
default void selfPark() {
System.out.println("Self‑parking engaged");
}
}
// КЛАСС, НАСЛЕДУЮЩИЙ АБСТРАКТНЫЙ КЛАСС И РЕАЛИЗУЮЩИЙ ИНТЕРФЕЙСЫ
class ElectricCar extends Vehicle implements ElectricVehicle, AutonomousDriving {
private int batteryLevel = 100;
// Должен вызвать конструктор абстрактного класса
public ElectricCar(String brand, int year) {
super(brand, year);
}
// Реализация абстрактных методов Vehicle
@Override
public void startEngine() {
if (batteryLevel > 10) {
System.out.println(brand + " electric motor started silently");
} else {
System.out.println("Low battery! Please charge");
}
}
@Override
public void stopEngine() {
System.out.println(brand + " electric motor stopped");
}
// Реализация методов ElectricVehicle
@Override
public void chargeBattery() {
batteryLevel = 100;
System.out.println("Battery fully charged");
}
@Override
public int getBatteryLevel() {
return batteryLevel;
}
// Реализация методов AutonomousDriving
@Override
public void enableAutopilot() {
System.out.println(brand + " autopilot enabled");
}
@Override
public void disableAutopilot() {
System.out.println(brand + " autopilot disabled");
}
// Собственный метод
public void showCompleteInfo() {
displayInfo(); // из Vehicle
showBatteryStatus(); // default метод из интерфейса
}
}
// Пример использования
public class Main {
public static void main(String[] args) {
ElectricCar tesla = new ElectricCar("Tesla", 2023);
tesla.startEngine(); // из абстрактного класса
tesla.enableAutopilot(); // из интерфейса
tesla.chargeBattery(); // из интерфейса
tesla.displayInfo(); // конкретный метод из Vehicle
// Вызов static метода интерфейса
ElectricVehicle.printWarranty();
// Полиморфизм через абстрактный класс
Vehicle vehicle = tesla;
vehicle.startEngine(); // работает
// Полиморфизм через интерфейс
ElectricVehicle ev = tesla;
ev.chargeBattery(); // работает
}
}