Die Überladung von Methoden (Method Overloading) ist die Fähigkeit, mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametern (Typ, Reihenfolge, Anzahl) in einer Klasse zu erstellen. Dieser Ansatz ermöglicht es, ähnliche Operationen logisch zu gruppieren und die Lesbarkeit des Codes zu verbessern.
public class MathUtil { public int sum(int a, int b) { return a + b; } public double sum(double a, double b) { return a + b; } public int sum(int a, int b, int c) { return a + b + c; } }
Frage: Kann man Methoden nur nach dem Rückgabetyp überladen (ohne Änderung der Parameter)?
Antwort: Nein. Eine Überladung ist nur bei unterschiedlichen Parameterlisten möglich. Eine Differenz nur im Rückgabetyp führt zu einem Kompilierungsfehler.
void foo(int a) {} int foo(int a) { return 1; } // Fehler! Der Rückgabetyp wird bei der Überladung nicht berücksichtigt.
Geschichte
In einem Projekt erstellte ein Entwickler zwei Methoden:
public void process(int x, double y) {...} public void process(double x, int y) {...}Bei dem Aufruf
process(5, 10)konnte der Compiler die benötigte Version nicht auswählen, was zu einem Fehler aufgrund von Mehrdeutigkeit führte. Dies verzögerte die Abgabe des Moduls.
Geschichte
In einer Anwendung waren die Methoden mit Überladung basierend auf varargs und Arrays:
public void log(String... messages) {...} public void log(String[] messages) {...}Die Übergabe des Arrays
String[] datarief nicht immer die erwartete Überladung auf, was dazu führte, dass einige Daten falsch protokolliert wurden – Teile der Informationen gingen verloren! Der Unterschied zwischen einem Array und varargs stellte sich als kritisch heraus.
Geschichte
Ein Entwickler überlud die Methoden einer Klasse, ohne die Auto-Boxing von Typen zu berücksichtigen:
public void save(Integer i) {...} public void save(int i) {...}Bei dem Aufruf
save(null)trat eine NullPointerException auf der Aufrufseite auf, da Java den spezifischsten Typ (int) wählt, aber null kann nicht in einen primitiven Typ konvertiert werden!