20% off with code ERSTIS26
4 min read 04 Jul 2026

Java Überladen vs. Überschreiben: Der Unterschied einfach erklärt

Unterschied zwischen Überladen und Überschreiben in Java einfach erklärt. Für Azubis, Studenten und Berufseinsteiger.

Marcel Schmidtpeter By Marcel Schmidtpeter 04 Jul 2026
Java Überladen vs. Überschreiben: Der Unterschied einfach erklärt

Du sitzt vor deiner IHK-Zwischenprüfung, einer Uni-Klausur oder deinem ersten Firmenprojekt. Du siehst zwei Methoden mit dem exakt gleichen Namen. Der Compiler wirft keinen Fehler aus, aber dein Kopf fragt: Warum funktioniert das? Die Lösung für dieses Rätsel heißt Java Überladen Überschreiben.

Beides sind fundamentale Konzepte der objektorientierten Programmierung, die deinen Code flexibel und wiederverwendbar machen. Ohne sie wäre jeder Java-Code extrem starr und schwer zu pflegen. Lass uns hineinschnuppen in die Materie.

Was ist Methoden-Überladen in Java?

Methoden-Überladen (Overloading) bedeutet, dass du mehrere Methoden mit demselben Namen innerhalb derselben Klasse erstellst. Der Java-Compiler erkennt an den übergebenen Parametern (den Eingabewerten), welche Methode gemeint ist.

Stell dir vor, du hast ein Werkzeug namens `drucke()`. Du kannst damit eine Textdatei drucken oder ein Bild drucken. Der Befehl bleibt immer `drucke()`, aber je nachdem, ob du einen Text oder ein Bild übergibst, weiß das Programm, was zu tun ist.

Damit das Überladen funktioniert, muss sich die sogenannte Methodensignatur unterscheiden. Die Signatur besteht aus dem Methodennamen und der Parameterliste.

Wichtig: Du kannst Methoden nur überladen, wenn sie unterschiedlich viele Parameter oder Parameter von unterschiedlichen Datentypen besitzen. Der Rückgabewert allein reicht nicht aus, um sie zu unterscheiden.

Warum nutzen wir das? Weil es die Lesbarkeit extrem verbessert. Anstatt Methoden wie `druckeText()` und `druckeBild()` zu schreiben, nutzt du einfach zweimal `drucke()`. Für den Außenstehenden bleibt die Schnittstelle klar und einfach.

Wie funktioniert Methoden-Überschreiben (Overriding)?

Methoden-Überschreiben (Overriding) passiert, wenn eine Kindklasse eine Methode neu definiert, die sie bereits von ihrer Elternklasse geerbt hat. Das ist das Herzstück der Java Vererbung.

Das kennst du aus dem echten Leben: Du erbst von deinen Eltern das Rezept für einen Apfelkuchen. Das Grundrezept (die Elternklasse) sagt, du sollst Äpfel und Teig verwenden. Aber du als Kind (die Kindklasse) entscheidest dich, noch Zimt hinzuzufügen. Du überschreibst die Methode `backeApfelkuchen()` mit deinem eigenen, neuen Code.

Damit das funktioniert, muss die Methode in der Kindklasse exakt dieselbe Signatur (Name und Parameter) haben wie in der Elternklasse.

Wichtig: Überschreiben ändert das Verhalten einer bestehenden Methode für ein spezifisches Objekt, ohne den Originalcode der Elternklasse anfassen zu müssen. Das ist perfekt, um spezialisierte Varianten eines Allgemeinen-Objekts zu erstellen.

Java Überladen vs. Überschreiben: Was ist der Unterschied?

Um den Unterschied für deine nächste Prüfung oder dein nächstes Projekt perfekt aufgeschnappt zu haben, habe ich dir die Unterschiede in einer Tabelle zusammengefasst. Hier sieh du auf einen Blick, was wann gilt.

Merkmal

Überladen (Overloading)

Überschreiben (Overriding)

Wo passiert das?

Innerhalb derselben Klasse.

In einer Kindklasse (Subklasse).

Methodensignatur

Muss unterschiedlich sein (andere Parameter).

Muss identisch sein (gleiche Parameter).

Rückgabetyp

Kann gleich oder unterschiedlich sein.

Muss gleich sein (oder ein Untertyp davon).

Bindung

Statische Bindung (wird beim Kompilieren entschieden).

Dynamische Bindung (wird zur Laufzeit entschieden).

Vererbung nötig?

Nein.

Ja.

OOP-Konzept

Kapselung von ähnlichen Funktionen.

Polymorphie (Vielgestaltigkeit).

Wie sieht Java Überladen und Überschreiben im Code aus?

Schauen wir uns das in einem konkreten Java-Beispiel an. Das ist exakt so aufgebaut, wie du es in deinem Arbeitsalltag als Fachinformatiker oder in einer Uni-Aufgabe finden könntest. Die offizielle Oracle Java Dokumentation erklärt solche Konzepte ebenfalls sehr detailliert (Oracle Docs: Overriding and Hiding Methods).

java
// Elternklasse
class Tier {

  // Methode, die spaeter ueberschrieben wird
  public void macheGeraeusch() {
    System.out.println("Das Tier macht ein Geraeusch.");
  }

  // Methode, die ueberladen wird (1 Parameter)
  public void fuettern(String futter) {
    System.out.println("Das Tier frisst " + futter);
  }

  // Ueberladene Methode (2 Parameter)
  public void fuettern(String futter, int menge) {
    System.out.println("Das Tier frisst " + menge + "kg " + futter);
  }
}

// Kindklasse
class Hund extends Tier {

  // Hier UEBERSCHREIBEN wir die Methode aus der Elternklasse
  @Override
  public void macheGeraeusch() {
    System.out.println("Der Hund bellt: Wuff!");
  }

  // Die Methode fuettern() haben wir hier NICHT geschrieben.
  // Wir erben sie automatisch von der Klasse Tier.
}

public class Main {

  public static void main(String[] args) {
    Hund meinHund = new Hund();

    // Test des Ueberschreibens
    meinHund.macheGeraeusch(); // Ausgabe: Der Hund bellt: Wuff!

    // Test des Ueberladens (beide Methoden stehen ueber die Vererbung zur Verfuegung)
    meinHund.fuettern("Fleisch"); // Ausgabe: Das Tier frisst Fleisch
    meinHund.fuettern("Knochen", 2); // Ausgabe: Das Tier frisst 2kg Knochen
  }
}

In diesem Codebeispiel sehen wir beide Konzepte kombiniert. Der Hund nutzt das überladene `fuettern()` aus der Elternklasse, überschreibt aber `macheGeraeusch()`, weil ein Hund eben anders klingt als ein generisches Tier.

Achte auf die Annotation `@Override`. Sie ist technisch optional, aber extrem empfehlenswert. Sie sagt dem Compiler: "Ich will hier eine Methode aus der Elternklasse überschreiben". Wenn du dich vertippst, meckert der Compiler sofort.

Welche Fehler sollte man beim Überladen und Überschreiben vermeiden?

In meiner Zeit als Nachhilfelehrer und Entwickler sehe ich immer wieder die gleichen Fehler. Wenn du diese vermeidest, sparst du extrem viel Zeit beim Debugging.

Fehler 1: Du versuchst, Methoden nur durch den Rückgabewert zu überladen.

Das geht nicht. Der Compiler weiß beim Aufruf oft noch nicht, was zurückkommt, und kann deshalb nicht entscheiden, welche Methode er nehmen soll.

Falsch:

java
public int berechne(int a, int b) {
  return a + b;
}

public double berechne(int a, int b) {
  // Compiler-Fehler!
  return a + b;
}

Richtig:

java
public int berechne(int a, int b) {
  return a + b;
}

public double berechne(double a, double b) {
  // Funktioniert!
  return a + b;
}

Fehler 2: Du vergisst die `@Override` Annotation beim Überschreiben.

Technisch gesehen funktioniert das Überschreiben auch ohne die Annotation über der Methode. Aber warum solltest du sie trotzdem immer schreiben? Weil der Compiler dich dann warnt, falls du dich beim Methodennamen vertipst hast. Ein Tippfehler würde sonst einfach zu einer völlig neuen, nutzlosen Methode führen, die nie aufgerufen wird.

Fehler 3: Du schränkst die Sichtbarkeit beim Überschreiben zu stark ein.

Wenn eine Methode in der Elternklasse `public` ist, kannst du sie im Kind nicht plötzlich `private` machen. Das würde den "Vertrag" der Elternklasse brechen. Java erlaubt nur, die Sichtbarkeit gleich zu lassen oder zu erweitern (z.B. von `protected` auf `public`).

Häufige Fragen zu Java Überladen und Überschreiben

Hier klären wir die Fragen, die in den Prüfungen oder im Alltag oft am Ende noch aufkommen.

Kann man statische Methoden überschreiben?

Nein. Statische Methoden gehören zur Klasse selbst und nicht zu einem Objekt (Instanz). Wenn du in einer Kindklasse eine statische Methode mit dem gleichen Namen erstellst, "versteckst" (hidest) du nur die Methode der Elternklasse. Das nennt man Method Hiding. Es findet hier keine dynamische Bindung statt.

Was ist der Unterschied zwischen statischer und dynamischer Bindung?

Das ist entscheidend für das Verständnis von Java Überladen Überschreiben.

  • Statische Bindung (Überladen): Der Compiler entscheidet schon beim Übersetzen des Codes, welche Methode aufgerufen wird. Das passiert immer beim Überladen.

  • Dynamische Bindung (Überschreiben): Die Entscheidung fällt erst, während das Programm läuft (Runtime). Java schaut sich den tatsächlichen Objekttyp im Speicher an. Das ist der Grund, warum ein `Hund` bellt, obwohl die Variable vom Typ `Tier` ist.

Warum kann man nicht nur am Rückgabetyp überladen?

Da Java bei einem Methodenaufruf nicht zwingend den Rückgabewert auswertet oder speichert, wäre für den Compiler oft mehrdeutig, welche Methode gemeint ist. Er bricht lieber mit einem Fehler ab, als zu raten.

Fazit

Der Unterschied zwischen Überladen und Überschreiben ist grundlegend für sauberes, objektorientiertes Programmieren. Überladen brauchst du, um Funktionen flexibler zu machen (gleicher Name, andere Parameter). Überschreiben brauchst du, um spezialisierte Klassen zu bauen und Verhalten anzupassen (gleicher Name, gleiche Parameter, neue Implementierung).

Wenn du diese beiden Konzepte sicher beherrschst, bist du einem Bestehen deiner IHK-Prüfung oder dem Bestehen deiner Uni-Klausur ein riesiges Stück näher. Das gilt für angehende Fachinformatiker genauso wie für Informatik-Studenten oder Quereinsteiger.

Brauchst du Hilfe dabei, komplexe Programmierkonzepte wirklich zu verstehen? Wenn dir Theorie und Selbststudium nicht mehr reichen, holen wir dich auf das nächste Level. Sichere dir deine individuelle IT-Nachhilfe und melde dich direkt bei study-it.education. Wir erklären dir Konzepte genau auf deinem Level - egal ob Azubi, Student oder Berufseinsteiger.


First chat · 0 € · 30 min

Need someone to walk through this with you?

Instead of re-reading: 30 min with a senior dev.

Book a free first chat →
About the author
Marcel Schmidtpeter
Marcel Schmidtpeter

Unterschied zwischen Überladen und Überschreiben in Java einfach erklärt. Für Azubis, Studenten und Berufseinsteiger.

marcel.schmidtpeter@study-it.education →
Keep reading

More reading