Polymorphie Polymorphie verstehen?

Loddakwin

Aktives Mitglied
Hi Leute,

also ich habe eine frage zu Polymorphie ich kann einfach nicht genau verstehen was das ist!
In meinem Skriptum steht das irgendwie nicht verständlich und im net hab ich auch nichts verständliches gefunden.

1. Typfamilien
Sei A eine Klasse und B eine Unterklasse von A – dann gilt:
wo ein A-Objekt erwartet wird (Zuweisung, Parameter), darf ein
B-Objekt eingesetzt werden.
Da das B-Objekt alle Eigenschaften des A-Objekts besitzt, ist dies
sinnvoll.

Code:
Person p;
Student s = new Student(...);
p = s;
...println(p.sameName(s));

Also ist Polymorphismus ganz normale vererbung?

Die umgekehrte Richtung ist problematisch, da nicht sicher ist, ob
die Referenz auf ein Unterklassenobjekt zeigt!
In Java lässt sich mit Hilfe des instanceof-Operators der Typ
abfragen:
Code:
Person p;
Student s;
s = p; //compile-time error!!
s = (Student)p; //ok – aber Laufzeitfehler wenn p
//keine Referenz auf Objekt vom Typ Student ist
if (p instanceof Student)
s = (Student)p;
else
...

Hier kann ich nicht verstehen warum man das hier prüfen sollte man sieht doch auf den ersten blick das p keine subclass von student ist sondern umgekehrt bzw weiss es da man den code ja selber geschrieben hat? Bzw man könnte nachschauen ob Person von Student erbt?

2. Methodenaufruf und dynamische Bindung
Sei wieder B eine Unterklasse von A, und die Methode m aus A
wird in B überschrieben – dann gilt:
beim Aufruf der Methode mittels r.m(...) entscheidet der Typ des
von r referenzierten Objekts welche Version der Methode
ausgeführt wird (und nicht der Typ von r).
Code:
Person p = new Person(...);
Student s = new Student(...);
p.display(); //klar: display von Person
s.display(); //klar: display von Student
p = s;
p.display(); //display von Student
Damit werden alle Objekte einer Typfamilie gleichartig behandelt
und es sind keine explizieten Fallunterscheidungen nötig!
Es wird automatisch die richtige Version der Methode ausgewählt,
auch wenn später weitere Unterklassen von Person hinzukommen.

Hier dieser Satz was soll das heißen versteh ich nicht ?
beim Aufruf der Methode mittels r.m(...) entscheidet der Typ des
von r referenzierten Objekts welche Version der Methode
ausgeführt wird (und nicht der Typ von r).
`
Ich wäre echt sehr sehr dankbar wenn mir das jemand erklären bzw ein bisschen erläutern könnte bitte bitte need it for a test 🙂

lg lodi
 
Zuletzt bearbeitet:
Polymorphie ist ein Nebeneffekt der Vererbung.

Bei deinem Beispiel mit Schüler und Person sieht man vielleicht auf den ersten Blick, was Sache ist, bei größeren Projekten wird das schnell schwierig. Außerdem kannst du z.b auch mehrere Unterklassen von Person in einer List<Person> speichern. Und dan musst du den exakten Typ prüfen, wenn du auf eine spezielle Kindmethode zugreifen möchtest.
 
Danke für deine Antwort hat mir schon etwas weitergeholfen aber könnte vielleicht jemand noch ein bisschen näher auf die fragen eingehen? 🙂

lg
 
Zuletzt bearbeitet:

Zurück
Oben