Was ist dynamische Polymorphie (Objektorientierte Programmierung)?

2 Antworten

Bei der dynamischen Polymorphie wird bei einem Methodenaufruf zur Laufzeit anhand des wirklichen Datentyps entschieden, welche Methode tatsächlich ausgeführt wird. Hierbei ist meist auch die Rede von der späten Bindung.

Ein simples Beispiel, dargestellt mit Pseudocode:

class Animal {
void talk() { print ""; }
}

class Dog extends Animal {
override void talk() { print "Wuff"; }
}

class Rabbit extends Animal {
}

Animal dog = new Dog();
Animal rabbit = new Rabbit();
dog.talk(); // Wuff
rabbit.talk(); // nothing

Zur Laufzeit werden die Objekte nach ihrem wirklichen Laufzeittyp ausgewertet. So zeigt die Referenz dog mit dem Datentyp Animal in Wirklichkeit auf ein Objekt der Klasse Dog. Da dieses Objekt eine eigene talk-Methode definiert, wird auch diese verwendet.

Das Objekt rabbit hingegen verfügt über keine eigene Methode, daher wird nun die Vererbungshierarchie von unten nach oben durchlaufen und nach einer Elternklasse gesucht, die die Methode definiert hat. Dies ist in diesem Fall Animal.

Dynamische Polymorpie bedeutet, dass einer Variablen einer Elternklasse auch ein neues Objekt einer passenden Kindklasse zugewiesen werden kann.

Angenommen, wir haben die Klassen Mensch, Professor und Student. Mensch ist die Elternklasse, die beiden anderen sind Kindklassen. Demnach kann eine Variable vom Typ Mensch auch ein Objekt vom Typ Student oder vom Typ Professor erhalten.
Bsp.:

public class Mensch { }

public class Student extends Mensch { }

public class Professor extends Mensch { }

public class Test
{
public static void main(String args[])
{
Mensch m1 = new Mensch(); // ist logisch
Mensch m2 = new Student(); // da jeder Student ein Mensch ist
Mensch m3 = new Professor(); // denn alle Professoren sind Menschen

// hier gäbe es einen Compilerfehler:
// Student s1 = new Mensch();
// Professor p1 = new Mensch();
// denn: nicht alle Menschen sind Studenten oder Professoren
}
}

Ich hoffe, ich konnte weiterhelfen.