Überladen vs. Überschreiben

Anleitungen usw. rund um Java, Tutorials halt.

Moderator: wegus

Antworten
Benutzeravatar
recJake
Beiträge: 669
Registriert: 19.07.2006, 11:50
Wohnort: IDEs

Überladen vs. Überschreiben

Beitrag von recJake » 27.07.2006, 09:22

Während meines Studiums habe ich einige Jahre auch Tutorien für Javaprogrammierung gegeben und dabei gab es immer wieder die gleichen Probleme. Eines davon ist das Verständnis des Unterschiedes zwischen den Wörtern Überladen(Overwrite/-load) und Überschreiben(Override):
Die Schwierigkeit für die meisten ist nicht, das Konzept als solches zu verstehen, sondern die Wortwahl und das kann in Prüfungen oder auf Meetings schnell zu Problemen führen. Deswegen werde ich auch nicht das Konzept näher erläutern, oder auf diverse Implikation bei der Kompilation oder der Ausführung eingehen.

Also für alle die es noch verstehen wollen/müssen hier eine kleine Erklärung:

Gegeben sei folgende Klasse:

Code: Alles auswählen

public class SuperClass {
  public void method() {
    // do something
  }
}
Wenn ich jetzt dieser Klasse eine Methode hinzufüge:

Code: Alles auswählen

public void method(int a) {
}
Man sieht, dass die neue Methode, genau den gleichen Namen, aber eine andere Parameterliste hat. Diesen Vorgang nennt man Überladen.

Das Überschreiben einer Methode funktioniert nur bei der Vererbung. Wenn es also eine erbende Klasse gibt:

Code: Alles auswählen

public class SubClass extends SuperClass {
  public void method() {
    // do something
  }
}
Wie man sieht, hat auch SubClass eine signaturgleiche (gleicher Name, gleiche Parameter) Methode, wie ihre Superklasse (void method()).
Das Neuerstellen einer Methode in einer erbenden Klasse mit der gleichen Methodensignatur wie in der Superklasse heisst Überschreiben

Auf den Punkt gebracht:
Überschreiben kann man nur in einee erbenden Klasse, Überladen kann man auch in der gleichen Klasse.
J..e
Willst Du coden, so code. Willst Du nutzen, so nutze. Willst Du beides, lass es!

Benutzeravatar
seapegasus
Beiträge: 594
Registriert: 29.06.2006, 18:32
Wohnort: Prag
Kontaktdaten:

Beitrag von seapegasus » 27.07.2006, 13:23

Auf Deutsch haette ich das richtig gewusst, *freu* aber auf Englisch muss ich auch immer nachdenken, ob ich jetzt override oder overwrite will. Overwrite ist also dasselbe wie overload? Doofe Sprache, das. :)

Wer eine Eselsleiter moechte:
  • * Wie beim Tintenkiller ist nach dem Ueberschreiben die alte vererbte Methode voellig aus der aktuellen Klasse weg, es gibt nur noch die neue Methode.
    * Hingegen wenn man etwas nur ueberlaed (den Gepaecktraeger z.B. :wink: ), dann ist die vorherige "Ladung" ja auch immer noch da. Man traegt jetzt nur mehr als normal, es gibt also beide Methoden noch in der Klasse.

Benutzeravatar
recJake
Beiträge: 669
Registriert: 19.07.2006, 11:50
Wohnort: IDEs

Beitrag von recJake » 27.07.2006, 13:47

Ja, so sieht es aus. Ursprünglich gab es nur die Begriffe -write und -ride.
Nun hören sich die beiden Wörter ausgesprochen aber ziemlich gleich an (besonders, wenn die Amis mit ihrem Bubblegum-Englisch daherkommen), also hat man sich dann dazu entschlossen, statt -write lieber load zu sagen.
In den offiziellen Dokumenten und Tutorials bei Sun findet man aber immer noch beide Varianten in einem wilden Mix.
J..e
Willst Du coden, so code. Willst Du nutzen, so nutze. Willst Du beides, lass es!

Antworten