Generic substitution principle in Java

class Vehicle {
    public void test() {
        //Implementation
    }
}

class Car extends Vehicle { }

class Truck extends Vehicle { }

List<Vehicle> list = new ArrayList<Vehicle>();
Vehicle vehicle = new Vehicle();
Car car = new Car();
Truck truck = new Truck();

list.add(vehicle);
list.add(car);
list.add(truck);

for (Vehicle curVehicle : list) {
    curVehicle.test();
}