„Hallo Amigo! Ich werde dir etwas über die Methodenüberladung erzählen.“

„Die kann man auch überladen?! Was für ein Tag!“

„Man kann eine ganze Menge mit ihnen machen, aber darauf wollen wir jetzt nicht näher eingehen.“

„Alles klar.“

„ Das Überladen ist ein sehr einfacher Vorgang. Eigentlich ist es nicht einmal ein Vorgang mit Methoden, auch wenn es manchmal mit einem abschreckenden Namen bezeichnet wird: parametrische Polymorphie

Du musst dir nur merken, dass jede Methode in einer Klasse einen eindeutigen Namen haben muss.

„Ja, ich weiß.“

„Naja, das stimmt nicht so ganz. Eigentlich stimmt es überhaupt nicht. Eine Methode muss keinen eindeutigen Namen haben. Eindeutig muss die Kombination aus dem Namen der Methode und den Typen ihrer Parameter sein. Diese Kombination wird auch als Methodensignatur bezeichnet.“

Code Kommentare
public void print();
public void print2();
Das ist erlaubt. Die beiden Methoden haben eindeutige Namen.
public void print();
public void print(int n);
Und das ist auch erlaubt. Die beiden Methoden haben eindeutige Namen (Signaturen).
public void print(int n, int n2);
public void print(int n);
Die Methodennamen sind hier immer noch eindeutig.
public int print(int a);
public void print(int n);
Aber das ist nicht erlaubt. Die Methoden sind nicht eindeutig, auch wenn verschiedene Typen übergeben werden.
public int print(int a, long b);
public long print(long b, int a);
Aber das ist erlaubt. Die Methodenparameter sind eindeutig.

„Das habe ich schonmal irgendwo gesehen.“

„Klar. Wenn du „System.out.println“ eingibst, schlägt IntelliJ IDEA ein paar Dutzend Versionen von print-Methoden vor, die unterschiedliche Parameter verwenden. Der Compiler identifiziert ganz einfach die gewünschte Methode basierend auf den Typen der übergebenen Parameter und ruft sie dann auf.“

„Das ist nicht so schwierig. Aber es ist keine Polymorphie.“

„Oder genauer gesagt, es ist nicht das Überschreiben von Methoden.“

Übrigens möchte ich erwähnen, dass die Parameternamen irrelevant sind. Sie gehen bei der Kompilierung verloren. Ist eine Methode einmal kompiliert, sind nur noch ihr Name und ihre Parametertypen bekannt.