In meinem Bestreben, besseren und saubereren Code zu schreiben, lerne ich die SOLID-Prinzipien kennen. In dieser Hinsicht erweist sich LSP als wenig schwierig, es richtig zu erfassen.
Mein Zweifel ist, was ist, wenn ich einige zusätzliche Methoden in meinem Subtyp S habe, die nicht im Typ T vorhanden waren, wird dies immer eine Verletzung von LSP sein? Wenn ja, wie mache ich dann extend
meinen Unterricht?
Nehmen wir zum Beispiel an, wir haben einen Bird
Typ. Und seine Untertypen sind Eagle
und Humming Bird
. Jetzt haben beide Untertypen ein gemeinsames Verhalten wie die Bird
. Hat aber Eagle
auch gutes räuberisches Verhalten (das im allgemeinen Bird
Typ nicht vorhanden ist ), das ich nutzen möchte . Daher kann ich das jetzt nicht mehr tun:
Bird bird = new Eagle();
So schenkt Eagle
diese zusätzlichen Verhalten brechen LSP?
Wenn ja, bedeutet das, dass ich meine Klassen nicht erweitern kann, da dies zu einer LSP-Verletzung führen würde?
class Eagle extends Bird {
//we are extending Bird since Eagle has some extra behavior also
}
Das Erweitern von Klassen sollte nach dem Open / Closed-Prinzip erlaubt sein, oder?
Vielen Dank im Voraus für die Antwort! Wie Sie deutlich sehen können, hat mich LSP wie alles verwirrt.
Bearbeiten: Beziehen Sie sich auf diese SO-Antwort. Auch hier verstößt es , wenn Car
es zusätzliches Verhalten hat ChangeGear
, gegen LSP. Wie können wir also eine Klasse erweitern, ohne LSP zu verletzen?