Polymorphie bezieht sich auf die Fähigkeit einer Sprache, verschiedene Objekte einheitlich zu behandeln, indem eine einzige Schnittstelle verwendet wird; als solche ist sie mit dem Überschreiben verbunden, d. h. die Schnittstelle (oder die Basisklasse) ist polymorph, der Implementierer ist das Objekt, das überschreibt (zwei Seiten derselben Medaille)
Der Unterschied zwischen den beiden Begriffen lässt sich ohnehin besser anhand anderer Sprachen erklären, z. B. C++: Ein polymorphes Objekt in C++ verhält sich wie das Java-Pendant, wenn die Basisfunktion virtuell ist, aber wenn die Methode nicht virtuell ist, wird der Codesprung aufgelöst statisch und der wahre Typ wird zur Laufzeit nicht überprüft. Polymorphismus umfasst also die Fähigkeit eines Objekts, sich je nach der für den Zugriff verwendeten Schnittstelle unterschiedlich zu verhalten; lassen Sie mich ein Beispiel in Pseudocode geben:
class animal {
public void makeRumor(){
print("thump");
}
}
class dog extends animal {
public void makeRumor(){
print("woff");
}
}
animal a = new dog();
dog b = new dog();
a.makeRumor() -> prints thump
b.makeRumor() -> prints woff
(unter der Annahme, dass makeRumor NICHT virtuell ist)
Java bietet diesen Grad an Polymorphismus (auch Object Slicing genannt) nicht wirklich.
a Hund b = new dog();
a.makeRumor() -> prints thump
b.makeRumor() -> prints woff
in beiden Fällen wird nur woff. gedruckt. da a und b sich auf die Klasse Hund beziehen