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 extendmeinen Unterricht?
Nehmen wir zum Beispiel an, wir haben einen BirdTyp. Und seine Untertypen sind Eagleund Humming Bird. Jetzt haben beide Untertypen ein gemeinsames Verhalten wie die Bird. Hat aber Eagleauch gutes räuberisches Verhalten (das im allgemeinen BirdTyp nicht vorhanden ist ), das ich nutzen möchte . Daher kann ich das jetzt nicht mehr tun:
Bird bird = new Eagle();
So schenkt Eaglediese 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 Cares zusätzliches Verhalten hat ChangeGear, gegen LSP. Wie können wir also eine Klasse erweitern, ohne LSP zu verletzen?