![]() ![]() ![]() |
![]() |
Java Einführungs-Seminar |
Beispiel |
Polymorphie - Java 1PolymorphieJeder der einige Jahre seines Lebens damit verbracht hat, Alt-Griechisch zu lernen, kann sicherlich sofort erkennen, dass Polymorphie etwas mit "poly morphein" zu tun hat - und damit Vielgestaltigkeit bedeutet. Nun nützt Alt-Griechisch weder etwas im heutigen Athen noch erlaubt es einem so "gebildeten" Menschen, das Wesen dieses Begriffs in der Welt der Datenverarbeitung zu ergründen.Ein wesentlich einfacherer und praxistauglicherer Begriff ist die "späte Bindung", die die Realisierung der Polymorphie beschreibt. Vergleichen wir daher einmal die frühe Bindung und die späte Bindung. und kommen erst am Schluß ins alte Griechenland zurück. Frühe BindungWenn wir bisher für ein Objekt eine Methode aufgerufen haben, dann war es ziemlich einfach herauszufinden, welche Methode gemeint war. Der Compiler mußte nur in der Klasse nachschauen, die als Datentyp der Variablen benutzt worden war. Beim Start der Methode wird die Adresse des Objektes an die Methode übergeben. Und damit die Methode den Inhalt (sprich die Attribute) des Objektes verändern oder weitere Methoden aufrufen. Diese frühe Bindung (zur Übersetzungszeit) wird in Java nicht genutzt.Die zweite Variante ist, dass die Zuordnung Objekt - Methode zur Übersetzungzeit getroffen wird. Späte BindungDie zweite Variante nennt man späte Bindung. Dabei wird der Inhalt einer Verweisvariablen (allgemein ein Zeiger oder eine Referenz, in Java nur Referenz) möglicherweise erst zur Laufzeit ermittelt. Dann kann der Verweis auf verschiedne Objekte Bezug nehmen. In Java gilt, dass jeder Verweis zur Laufzeit ermittelt, auf welche Art von Objekt er zeigt. Und erst während der Laufzeit wird dann herausgesucht, welche Methode zu dem Objekt passt, auf das ich mich gerade beziehe. Das ist dann die späte Bindung zur Laufzeit..Einer Referenz auf eine Basisklasse kann ein Verweis auf eine davon abgeleitete Klasse zugewiesen werden. Trotzdem wird zur Laufzeit die Methode gefunden, die zum bezogenen Objekt gehört und nicht die Methode, auf die man im ersten Moment vermutlich getippt hätte, nämlich die Methode, die zum Typ der Referenz paßt. In Java gibt es eine einzige Wurzel des Klassenbaumes: Object. Da bei jeder neuen Klasse entweder explizit eine andere Klasse geerbt wird, oder aber implizit von der Ausgangsklasse "Object" geerbt wird, hängen alle Klassen logisch zusammen. Damit kamm man zumindest einem Verweis auf ein Basisklassenobjekt immer einen beliebigen anderen Verweis zuweisen. PolymorphieGehen wir nun noch davon aus, dass in den abgeleiteten Klassen eine Methode überlagert wird, dann wird bei einem Zugriff erst zur Laufzeit klar, welche der Methoden benutzt wird. Eine Anweisung führt also nicht zu dem statisch geschriebenen Ergebnis, sondern zu einem dynamisch ermittelten Ergebnis. Das nennt man die Vielgestaltigkeit - die Polymorphie. |
|
![]() |
Das Seminar wurde entwickelt von Walter Herglotz, München, 1999. Alle Rechte sind vorbehalten. © Copyright "walter digital", München, Walter Herglotz, 1999-2000 |