Polymorphie: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== Polymorphie in Java == Polymorphie bedeutet „Vielgestaltigkeit“ und ist eines der vier Grundprinzipien der objektorientierten Programmierung. In Java beschreibt es die Fähigkeit, dass eine Methode auf verschiedene Weise reagieren kann, je nachdem, welches Objekt sie aufruft. Polymorphie erhöht die Flexibilität, Wartbarkeit und Wiederverwendbarkeit des Codes. === Formen der Polymorphie === === 1. Laufzeitpolymorphie (dynamisch) === Erreicht d…“ |
|||
| (15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Polymorphie in Java bedeutet „Vielgestaltigkeit“ und ist eines der vier Grundprinzipien der | |||
objektorientierten Programmierung ([[OOP]]). | |||
In Java beschreibt es die Fähigkeit, dass eine [[Methoden in Java|Methode]] auf verschiedene Weise reagieren kann, je nachdem, welches Objekt sie aufruft. | |||
Polymorphie | Polymorphie erhöht die Flexibilität, Wartbarkeit und Wiederverwendbarkeit des Codes. | ||
Polymorphie | == Formen der Polymorphie == | ||
=== | === Laufzeitpolymorphie (dynamisch) === | ||
Erreicht durch Methodenüberschreibung '''(Overriding)''' in Unterklassen. | |||
= | <syntaxhighlight lang="java"> | ||
class Tier { | |||
public void geraeusch() { | |||
System.out.println("Ein Tier macht ein Geräusch"); | |||
} | |||
} | |||
class Hund extends Tier { | class Hund extends Tier { | ||
@Override | @Override | ||
public void geraeusch() { | public void geraeusch() { | ||
System.out.println("Wuff!"); | System.out.println("Wuff!"); | ||
} | } | ||
} | } | ||
class Katze extends Tier { | class Katze extends Tier { | ||
@Override | @Override | ||
public void geraeusch() { | public void geraeusch() { | ||
System.out.println("Miau!"); | System.out.println("Miau!"); | ||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 28: | Zeile 34: | ||
Aufruf über die Oberklasse: | Aufruf über die Oberklasse: | ||
<syntaxhighlight lang="java"> Tier t1 = new Hund(); Tier t2 = new Katze(); | <syntaxhighlight lang="java"> | ||
Tier t1 = new Hund(); | |||
Tier t2 = new Katze(); | |||
t1.geraeusch(); // Wuff! | t1.geraeusch(); // Wuff! | ||
t2.geraeusch(); // Miau! | t2.geraeusch(); // Miau! | ||
| Zeile 35: | Zeile 43: | ||
Obwohl t1 und t2 den Typ Tier haben, wird die überschriebene Methode der jeweiligen Unterklasse aufgerufen. | Obwohl t1 und t2 den Typ Tier haben, wird die überschriebene Methode der jeweiligen Unterklasse aufgerufen. | ||
=== | === Compile-Zeit-Polymorphie (statisch) === | ||
Erreicht durch Methodenüberladung (Overloading) – mehrere Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten. | Erreicht durch Methodenüberladung '''(Overloading)''' – mehrere Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten. | ||
<syntaxhighlight lang="java"> public class Mathe { | <syntaxhighlight lang="java"> | ||
public class Mathe { | |||
public int addiere(int a, int b) { | |||
return a + b; | |||
public int addiere(int a, int b) { | } | ||
} | |||
public double addiere(double a, double b) { | public double addiere(double a, double b) { | ||
return a + b; | |||
} | } | ||
public int addiere(int a, int b, int c) { | public int addiere(int a, int b, int c) { | ||
return a + b + c; | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 58: | Zeile 64: | ||
Der passende Methodentyp wird zur Compile-Zeit anhand der Argumente entschieden. | Der passende Methodentyp wird zur Compile-Zeit anhand der Argumente entschieden. | ||
== Vorteile von Polymorphie == | |||
Unterstützt Entwurfsmuster und lose Kopplung | * Reduziert Duplikate im Code | ||
* | |||
* Erlaubt flexible und einheitliche Schnittstellen | |||
* | |||
* Unterstützt Entwurfsmuster und lose Kopplung | |||
== Beispiel: Polymorphie in [[Arrays]] und [[Schleifen]] == | |||
<syntaxhighlight lang="java"> Tier[] tiere = { new Hund(), new Katze(), new Tier() }; | <syntaxhighlight lang="java"> | ||
Tier[] tiere = { new Hund(), new Katze(), new Tier() }; | |||
for (Tier t : tiere) { | for (Tier t : tiere) { | ||
t.geraeusch(); // jeder macht sein eigenes Geräusch | t.geraeusch(); // jeder macht sein eigenes Geräusch | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Kategorie:Programmieren]] | |||
[[Kategorie:Semester4]] | |||
Aktuelle Version vom 11. Januar 2026, 16:52 Uhr
Polymorphie in Java bedeutet „Vielgestaltigkeit“ und ist eines der vier Grundprinzipien der objektorientierten Programmierung (OOP). In Java beschreibt es die Fähigkeit, dass eine Methode auf verschiedene Weise reagieren kann, je nachdem, welches Objekt sie aufruft.
Polymorphie erhöht die Flexibilität, Wartbarkeit und Wiederverwendbarkeit des Codes.
Formen der Polymorphie
Laufzeitpolymorphie (dynamisch)
Erreicht durch Methodenüberschreibung (Overriding) in Unterklassen.
class Tier {
public void geraeusch() {
System.out.println("Ein Tier macht ein Geräusch");
}
}
class Hund extends Tier {
@Override
public void geraeusch() {
System.out.println("Wuff!");
}
}
class Katze extends Tier {
@Override
public void geraeusch() {
System.out.println("Miau!");
}
}
Aufruf über die Oberklasse:
Tier t1 = new Hund();
Tier t2 = new Katze();
t1.geraeusch(); // Wuff!
t2.geraeusch(); // Miau!
Obwohl t1 und t2 den Typ Tier haben, wird die überschriebene Methode der jeweiligen Unterklasse aufgerufen.
Compile-Zeit-Polymorphie (statisch)
Erreicht durch Methodenüberladung (Overloading) – mehrere Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten.
public class Mathe {
public int addiere(int a, int b) {
return a + b;
}
public double addiere(double a, double b) {
return a + b;
}
public int addiere(int a, int b, int c) {
return a + b + c;
}
}
Der passende Methodentyp wird zur Compile-Zeit anhand der Argumente entschieden.
Vorteile von Polymorphie
- Reduziert Duplikate im Code
- Erlaubt flexible und einheitliche Schnittstellen
- Unterstützt Entwurfsmuster und lose Kopplung
Beispiel: Polymorphie in Arrays und Schleifen
Tier[] tiere = { new Hund(), new Katze(), new Tier() };
for (Tier t : tiere) {
t.geraeusch(); // jeder macht sein eigenes Geräusch
}
