Keeping things tidy and simple, here is my initial Java pseudocode as an example:
public abstract class Vehicle {
private String owner;
private id plate;
public removeVehicle() {
if (typeof(this) == Car) {this.removeCar();}
if (typeof(this) == Truck) {this.removeTruck();}
}
}
public class Car extends Vehicle {
public removeCar() {
this.removeVehicle(this);
}
}
public class Truck extends Vehicle {
public removeTruck() {
this.removeVehicle(this);
}
}
From the book Agile principles patterns and practices in C# by Robert, Micah Martin says that it does not comply with Liskov principle since Vehicle, in order to remove other vehicles types (e.g. Motorcicle), needs to extend code and add another if statement for this new type of vehicle.
I tried to follow solutions provided from here, but most are just taken from the book I just referrenced and I'm actively trying to properly understand.
How can I modify this pseudocode so it does comply with Liskov?