Liskov-substitutionsprincipen (LSP) säger att objekt av en undertyp måste vara utbytbara för sin bastyp utan att bryta programmets korrekthet. Om kod fungerar med en Base, måste den fungera med alla Subclass — samma beteendförväntningar, inga överraskningar.
Den kanoniska överträdelsen: Square extends Rectangle
{
w, h;
{ .w = w; }
{ .h = h; }
{ w * h; }
}
{
{ .w = w; .h = w; }
{ .w = h; .h = h; }
}
{
r.setWidth();
r.setHeight();
r.area() == ;
}
