Sonntag, 2026-02-22_Programmiertechnik_UDEMY¶
1) Method Overloading¶
Definition¶
Method Overloading bedeutet:
Gleicher Methodenname, aber unterschiedliche Parameterliste.
Die Methoden befinden sich meistens in derselben Klasse.
Beispiel:
class Dog {
public void bark() {
System.out.println("woof");
}
public void bark(int number) {
for (int i = 0; i < number; i++) {
System.out.println("woof");
}
}
}
Regeln für Overloading¶
- Muss denselben Methodennamen haben
- Muss unterschiedliche Parameter haben
- Darf unterschiedliche Rückgabetypen haben
- Darf unterschiedliche Access Modifier haben
- Darf unterschiedliche Exceptions werfen
- Funktioniert mit static und Instanzmethoden
Wichtig¶
Overloading = Compile-Time Polymorphism
Der Compiler entscheidet anhand der Parameterliste, welche Methode aufgerufen wird.
2) Method Overriding¶
Definition¶
Method Overriding bedeutet:
Eine Methode aus der Elternklasse wird in der Kindklasse neu definiert.
Voraussetzung:
IS-A Beziehung (Vererbung)
Beispiel:
class Dog {
public void bark() {
System.out.println("woof");
}
}
class GermanShepherd extends Dog {
@Override
public void bark() {
System.out.println("woof woof woof");
}
}
Regeln für Overriding¶
- Gleicher Name
- Gleiche Parameter
- Nur in Vererbungshierarchie
- Nur Instanzmethoden (keine static)
- Konstruktoren können nicht überschrieben werden
- private Methoden können nicht überschrieben werden
- final Methoden können nicht überschrieben werden
Rückgabetyp¶
- Muss gleich sein
oder - darf ein covarianter Rückgabetyp sein
3) Covariant Return Type¶
Beim Overriding darf der Rückgabetyp:
- identisch sein
oder - eine Subklasse des ursprünglichen Rückgabetyps sein
Beispiel mit clone():
In Object:
protected Object clone() throws CloneNotSupportedException
In einer Person-Klasse:
@Override
public Person clone() {
return new Person(name, birthDate);
}
Warum erlaubt?
- Person ist eine Subklasse von Object
- Somit ist Person ein gültiger covarianter Rückgabetyp
Zusätzlich:
- protected → public ist erlaubt (weniger restriktiv)
- public → protected wäre nicht erlaubt
4) Overloading vs Overriding Vergleich¶
| Merkmal | Overloading | Overriding |
|---|---|---|
| Klassenanzahl | Meist 1 Klasse | Immer 2 Klassen |
| Parameter | Müssen unterschiedlich sein | Müssen identisch sein |
| Rückgabetyp | Beliebig | Gleich oder covariant |
| Access Modifier | Beliebig | Nicht restriktiver |
| Exceptions | Beliebig | Keine breiteren checked Exceptions |
| Entscheidung | Compile-Time | Runtime |
| Polymorphismus | Statisch | Dynamisch |
5) Wichtige Konzepte¶
Compile-Time Polymorphism¶
= Overloading
Compiler entscheidet.
Runtime Polymorphism¶
= Overriding
JVM entscheidet zur Laufzeit.
Beispiel:
Dog dog = new GermanShepherd();
dog.bark();
Zur Laufzeit wird die Methode der GermanShepherd-Klasse ausgeführt.
6) @Override Annotation¶
- Nicht verpflichtend
- Sehr empfohlen
- Compiler prüft, ob wirklich überschrieben wird
- Verhindert Fehler bei falscher Signatur
7) Merksätze¶
Overloading:
Gleicher Name, andere Parameter.
Overriding:
Gleicher Name, gleiche Parameter, neue Implementierung.
Covariant:
Rückgabetyp darf spezifischer werden.
8) Typische Prüfungsfragen¶
- Unterschied Overloading / Overriding?
- Wann entscheidet der Compiler?
- Wann entscheidet die JVM?
- Was ist ein covarianter Rückgabetyp?
- Warum kann man static nicht überschreiben?
- Warum kann private nicht überschrieben werden?
9) Zusammenfassung¶
- Overloading: Gleicher Name, andere Parameter, Compiler entscheidet.
- Overriding: Gleicher Name, gleiche Parameter, neue Implementierung, JVM entscheidet.
- Covariant Return Type: Rückgabetyp darf spezifischer sein.
- @Override Annotation schützt vor Fehlern.
- Wichtig für Polymorphismus und flexible Softwareentwicklung.
- Verstehen der Unterschiede ist essenziell für OOP.