Polymorphismus bringt dynamische Bindung. Nicht wie sonst üblich entscheidet der Compiler zur Übersetzungszeit welche Methode aktiviert wird (statische Bindung). Zur Laufzeit wird festgestellt welchen Typ das Objekt hat und dann wird die entsprechende Methode aufgerufen.
Statische Bindung bedeutet, dass die Bindung vom Namen einer Funktion oder Methode zur deren Definition statisch, d.h. zur Übersetzungszeit erfolgt.
Dynamische Bindung bedeutet, dass der Bezug vom Namen zur Definition (die Bindung des Namens) dynamisch, d.h. zur Laufzeit, erfolgt.
Es ist klar, dass die Flexibilität der dynamischen Bindung mit komplexerem Maschinencode und leicht erhöhter Laufzeit bezahlt werden muss. Der Compiler generiert Code, der den aktuellen Typ eines Objekts feststellt und dann in die entsprechende Methode verzweigt.
Die Objekte enthalten die Adressen ihrer Methoden in einer Methodentabelle. Der Compiler erzeugt keinen Sprung zu der Methode, sondern einen Sprung zu der Methode, deren Adresse in der Methodentabelle gefunden wird.
Polymorphismus entfaltet seine Wirkung also nur in Kombination mit Referenzen. Ein Zeiger vom Typ der Basisklasse kann auch auf ein Objekt der abgeleiteten Klasse zeigen. In dem Fall wird die Methode aktiviert, die tatsächlich zu dem Objekt gehört.
|