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?