Unterschied Vererbung und Polymorphie in Java?
Hallo, unter Vererbung verstehe ich folgendes:
Die Subklasse, bekommt von ihrer Superklasse sämtliche Attribute und Methoden vererbt. Desweiteren wird die Subklasse um eigene Attribute und Methoden erweitert.
Aber was ist Polymorphie? Also was genau passiert dort und wann benutze ich es?
Bitte in eigenen Worten erklären und nicht nur einfach Links posten...
Gruß
2 Antworten
Poly = Viel
morphos = Gestalt.
Polymorphismus = Vielgestaltigkeit.
So kann eine geometrische Figur einfach als "Klasse Figur" implementiert werden mit einer Position (x, y) und einer Methode "move()" und einer einfachen Methode "draw()", welche einfach einen Punkt an die Stelle x,y zeichnet..
In den vererbten Klassen Dreieck, Rechteck und Kreis werden wir die Methode "draw()" nun überschrieben, sodass ein Dreieck, ein Rechteck beziehungsweise ein Kreis gezeichnet wird.
Eine Zeichnung besteht nun aber nicht aus drei Listen, eine für die Dreiecke, eine für die Rechtecke und eine für die Kreise, sondern nur noch aus einer einzigen Liste "Figuren". Da "Figur" die Überklasse über die drei konkreten Figuren ist, brauche ich nur noch eine einzige "foreach"-Schleife, um nun alle Figuren anzuzeigen. Der Array "meineFiguren" ist somit poly-morph und kann viele (in diesem Beispiel im wahrsten Sinne des Wortes) Formen annehmen:
Figur f;
foreach f aus meineFiguren do:
f -> draw()
oder in Java
for(Figur f: meineFiguren) f.draw();
Ich poste dennoch einen Link, wo ich Kapitel 20 empfehle. Dort sind weitere Beispiele:
Ich werde dir an dieser Stelle doch einen Link posten, allerdings zu einer etwas älteren Antwort von mir, in der ich bereits ausführlich erklärt habe, was es mit Polymorphie auf sich hat.
https://www.gutefrage.net/frage/java-polymorphie?foundIn=list-answers-by-user#answer-268101402
(...) wann benutze ich es?
Polymorphie wird genutzt, um zum einen Objekte unterschiedlichen Datentyps (aber eines Basistyps) zu gruppieren und bspw. in einer Datenstruktur zu speichern, über die man iterieren kann.
Des Weiteren stellt es eine Abstraktion und somit eine Entkopplung von konkretem Quellcode dar. Du kannst für eine Server-Client-Architektur bspw. ein Interface definieren, welches auf beiden Seiten zum Einsatz kommt. Dabei steht die konkrete Implementation noch gar nicht fest, sie kann später flexibel festgelegt werden.
Wenn du dazu noch weitere Fragen hast, schreibe sie mir in den Kommentarbereich.
Ich habe noch etwas in meinen alten Beiträgen herumgesucht, um verwandte Fragen/Antworten zu finden, die zudem aufzeigen, wo Polymorphie praktisch verwendet wird.
- So hängt das Thema natürlich sehr an Vererbung und legt den Grundstein für Interfaces: https://www.gutefrage.net/frage/was-sind-interfaces-und-warum-braucht-java-diese?foundIn=list-answers-by-user#answer-266729587
- Jemand hat damals nach Übungsaufgaben zu Vererbung und Polymorphie gefragt. Vielleicht möchtest du dich daran ausprobieren: https://www.gutefrage.net/frage/java-vererbung--polymorphie-uebungsaufgaben?foundIn=list-answers-by-user#answer-226148686