377 Stimmen

Polymorphismus vs. Overriding vs. Überladen

In Bezug auf Java, wenn jemand fragt:

Was ist Polymorphismus?

Würde Überlastung o Übergeordnetes eine akzeptable Antwort sein?

Ich glaube, da steckt ein bisschen mehr dahinter.

WENN Sie eine abstrakte Basisklasse haben, die eine Methode ohne Implementierung definiert, und Sie definieren diese Methode in der Unterklasse, ist das immer noch überschreibend?

Ich denke Überlastung ist mit Sicherheit nicht die richtige Antwort.

0voto

Lorenzo Boccaccia Punkte 5854

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X