Overloading (Methodenüberladung)
Kurz: Mehrere Methoden mit demselben Namen, aber unterschiedlicher Parameterliste (Anzahl oder Typ der Parameter) innerhalb derselben Klasse.
Genauer: Welche der überladenen Varianten beim Aufruf tatsächlich ausgeführt wird, entscheidet der Compiler anhand der übergebenen Argumente — z. B. eine add(int, int)- und eine add(double, double)-Methode nebeneinander. Nicht zu verwechseln mit Overriding (Methodenüberschreibung), bei dem eine Unterklasse eine geerbte Methode mit identischer Signatur neu implementiert (siehe Vererbung).
Im Detail
class Rechner {
int addiere(int a, int b) {
return a + b;
}
double addiere(double a, double b) {
return a + b;
}
int addiere(int a, int b, int c) {
return a + b + c;
}
}Alle drei Methoden heißen addiere, unterscheiden sich aber in ihrer Signatur — der Kombination aus Anzahl UND Typen der Parameter (der Rückgabetyp allein zählt in den meisten Sprachen NICHT als Unterscheidungsmerkmal, zwei Methoden mit identischen Parametern aber unterschiedlichem Rückgabetyp wären also weiterhin ein Konflikt). Beim Aufruf addiere(2, 3) wählt der Compiler automatisch die passende Variante anhand der übergebenen Argumente aus — dieser Vorgang heißt “Überladungsauflösung”.
Overloading wird häufig genutzt, um dieselbe grundsätzliche Operation für unterschiedliche Eingabeformen bequem anzubieten, ohne für jede Variante einen eigenen, unterschiedlich benannten Methodennamen erfinden zu müssen (addiereZweiInts, addiereZweiDoubles, …) — der Aufrufer muss sich nur EINEN Namen merken, der Compiler kümmert sich um die Auswahl der richtigen Implementierung.
Wichtige Abgrenzung zu Overriding: Overloading passiert innerhalb derselben Klasse mit unterschiedlichen Signaturen und wird zur Kompilierzeit aufgelöst. Overriding passiert dagegen zwischen einer Ober- und einer Unterklasse mit IDENTISCHER Signatur — die Unterklasse ersetzt die geerbte Implementierung durch eine eigene, was erst zur Laufzeit anhand des tatsächlichen Objekttyps entschieden wird (siehe Polymorphie). Beide Begriffe klingen ähnlich, meinen aber grundlegend unterschiedliche Mechanismen.
Siehe auch: Methods, Parameters, Inheritance