Polymorphie und LSP

Taso44

Aktives Mitglied
Hallo zusammen,
könnte mir vielleicht jemand erklären was der Unterschied zwischen Polymorphie und dem liskovischen Substitutionsprizip ist?
Habe im Internet mal geguckt, aber das ganze hat mich dann mehr verwirrt als ich schon von vornerein war.

Laut meinem Verständnis heißt es:
Polymorphie: Ein Objekt kann in allen Gestalten seiner Vaterklasse auftreten
Beispiel: Hund h = new Tier();
Und auch LSB heißt genau das selbe. Also das ein Objekt in die Gestalten seiner Oberen Klassen schlüpfen kann.

Danke schon

Grüße
 

httpdigest

Top Contributor
Polymorphie sagt nur, dass vom Typsystem her, eine Instanz einer Subklasse im Kontext seiner Elternklasse verwendet werden kann.
Es sagt aber nichts über das tatsächlich beobachtbare Verhalten aus.
Ein häufig gerne hergenommenes Anti-Beispiel ist "Ein Quadrat ist ja auch ein Rechteck."
Das ist natürlich falsch, wenn man es so modelliert, dass man Quadrat von Rechteck ableiten lässt, wobei Rechteck aber die (beobachtbaren) Properties "breite" und "höhe" hat, die sich bei einem reinen Rechteck unabhängig voneinander setzen lassen, aber nicht mehr bei einem Quadrat.
Also das beobachtbare Verhalten von Quadrat weicht von dem eines Rechtecks hier ab.
 

KonradN

Super-Moderator
Mitarbeiter
Also das Hund h = new Tier() ist so erst einmal schlicht falsch. Ein Hund ist ein Tier. Also kannst Du überall, wo ein Tier erwartet wird, auch einen Hund hin geben. Du hast es also verdreht.

Und das LSP besagt, dass sich das Verhalten durch abgeleitete Klassen nicht ändern darf. Ein Hund ist ein Tier und muss sich also so, wie ein Tier verhalten. Es darf weiter spezifiziert werden, aber es darf nicht komplett verändert werden.

Sieh das, das eine Klasse vorgibt, als Vertrag an. Dann müssen alle abgeleiteten Klassen diesen Vertrag auch erfüllen.

Und die Formulierung ist auch sonst falsch.

Polymorphie beschreibt sozusagen die Syntax und was möglich ist. Also eben das
Tier tier = new Hund();

Das LSP geht auf die Semantik ein. Wenn Tier ein Verhalte hat, dann muss dies der Hund auch haben (ggf. weiter spezifiziert, aber das Verhalten selbst ist da.)

Konkretes Beispiel:

Ich habe Object in Java. Das gibt vor, dass es ein equals und ein hashcode gibt. Durch die Polymorphie ist sicher gestellt, dass jede abgeleitete Klasse diese Methoden auch hat.

Object besagt aber in der Logik auch: Wenn ein Objekt mit equals true zurück gibt, dann muss der Hashcode gleich sein.
Das ist ein konkretes Verhalten und das sollte.
Da kommt das LSP ins Spiel. Dem Java Compiler und der JVM ist das prinzipiell egal. Aber das ist ein Vertrag, der eingehalten werden sollte. Wenn nicht, schimpft nicht der Compiler sondern derjenige, der den Code sieht.

Das kann man nun noch ausbauen: Diesen Contract erweitere ich. Ich mache eine AbstractEntity. Diese bekommt einen Integer id.
Ich implementiere equals nun so: Wenn eine id null ist, dann ist es nicht gleich ansonsten der Vergleich der ids. Und der Hashcode ist immer 42.
Das ist eine Logik, die die Anforderungen von Object erfüllt und das LSP ist erfüllt.

Wenn jetzt jemand von AbstractEntity etwas ableitet, dass darf er dieses Verhalten wieder nicht ändern. Denn jeder der sieht, das dass ja eine AbstractEntity ist, erwartet ein bestimmtes Verhalten.

Hat das etwas Licht ins Dunkel gebracht?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
A Polymorphie Java Basics - Anfänger-Themen 4
O Polymorphie Java Basics - Anfänger-Themen 3
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
K Polymorphie Java Basics - Anfänger-Themen 6
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
C Kurze Frage zur Polymorphie Java Basics - Anfänger-Themen 1
J Polymorphie - Beispielcode Java Basics - Anfänger-Themen 7
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
T Polymorphie Java Basics - Anfänger-Themen 4
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
C Polymorphie Java Basics - Anfänger-Themen 1
L Polymorphie Polymorphie verstehen? Java Basics - Anfänger-Themen 2
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
N Methoden Polymorphie Java Basics - Anfänger-Themen 11
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
S Vererbung Objekte in verwandten Klassen (Kovarianz, Polymorphie) Java Basics - Anfänger-Themen 4
R Polymorphie Java Basics - Anfänger-Themen 2
M Vererbung Enum Vererbung/Polymorphie Java Basics - Anfänger-Themen 2
P Polymorphie Java Basics - Anfänger-Themen 6
xehpuk Polymorphie Polymorphie in Parametern Java Basics - Anfänger-Themen 5
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
A OOP Polymorphie Java Basics - Anfänger-Themen 6
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
C OOP Frage zu Polymorphie Java Basics - Anfänger-Themen 4
P Eine Frage begzl. Interface / Polymorphie Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
T Vererbung und Polymorphie Java Basics - Anfänger-Themen 7
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
Z Vererbung oder Polymorphie? Java Basics - Anfänger-Themen 5
J Polymorphie Java Basics - Anfänger-Themen 6
G Polymorphie und Interface Java Basics - Anfänger-Themen 2
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 25
S Polymorphie - oder auch spanisches Dorf? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben