DemoVehicle.java
package fr.univtln.bruno.samples.java101.tp2.app;
import fr.univtln.bruno.samples.java101.tp2.impl.Car;
import fr.univtln.bruno.samples.java101.tp2.impl.ElectricCar;
import fr.univtln.bruno.samples.java101.tp2.impl.ServiceCar;
import fr.univtln.bruno.samples.java101.tp2.model.Vehicle;
import fr.univtln.bruno.samples.java101.tp2.service.Driver;
import fr.univtln.bruno.samples.java101.tp2.service.Manufacturer;
/**
* Small post-lecture demo showcasing:
* - inheritance (Vehicle -> Car/Bike/ElectricCar)
* - abstract classes and partial implementations (Vehicle.description())
* - interfaces (+ default methods) and multiple inheritance (Drivable, Electric, Maintainable)
* - delegation (Driver -> Drivable)
* - covariant returns (copy())
* - static method hiding (category())
*/
public final class DemoVehicle {
private DemoVehicle() {}
public static void main(String[] args) {
System.out.println("== Polymorphism ==");
Vehicle v1 = new Car("C1");
Vehicle v2 = new ElectricCar("E1");
System.out.println("v1.move() => " + v1.move());
System.out.println("v2.description() => " + v2.description());
System.out.println("\n== Method hiding (static) ==");
System.out.println("Vehicle.category() => " + Vehicle.category());
System.out.println("Car.category() => " + Car.category());
System.out.println("ElectricCar.category() => " + ElectricCar.category());
System.out.println("\n== Covariant returns (copy) ==");
Car c = new Car("C2");
Car cCopy = c.copy();
System.out.println("Car.copy() => " + cCopy);
ElectricCar ec = new ElectricCar("E2");
ElectricCar ecCopy = ec.copy();
System.out.println("ElectricCar.copy() => " + ecCopy);
System.out.println("\n== Delegation ==");
ServiceCar svc = new ServiceCar("SVC-1");
Driver alice = new Driver("Alice", svc);
System.out.println("Driver.startVehicle() => " + alice.startVehicle());
System.out.println("Driver.drive() => " + alice.drive());
System.out.println("\n== Composition (fabrication) ==");
Manufacturer maker = new Manufacturer("Acme");
Vehicle prod = maker.produce("AC-1");
System.out.println("Manufacturer.produce => " + prod);
System.out.println("\n== instanceof / cast ==");
if (v2 instanceof ElectricCar ecar) {
System.out.println("Downcast ok => charge() => " + ecar.charge());
}
System.out.println("\nDone.");
}
}