Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| programmierung:klassen:vererbung [2024/08/25 16:13] – created swe | programmierung:klassen:vererbung [2025/12/20 14:53] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | # Vererbung |
| - | ===== Superklasse und Subklasse | + | ## Superklasse und Subklasse |
| - | Vererbung ist ein grundlegendes Konzept in der objektorientierten Programmierung (OOP), das es ermöglicht, | + | Vererbung ist ein grundlegendes Konzept in der objektorientierten |
| + | Programmierung (OOP), das es ermöglicht, | ||
| + | einer bestehenden Klasse zu erstellen. Die neue Klasse, die als | ||
| + | **Subklasse** oder Kindklasse bezeichnet wird, erbt die Eigenschaften | ||
| + | und Methoden der bestehenden Klasse, die als **Superklasse** oder | ||
| + | Elternklasse bezeichnet wird. Dies fördert die Wiederverwendbarkeit von | ||
| + | Code und die Hierarchisierung von Klassen. | ||
| - | **Beispiel: Vererbung in Java** | + | ### Superklasse |
| - | Stellen wir uns vor, wir entwickeln eine Anwendung für ein Tierheim. Wir beginnen mit einer allgemeinen Klasse '' | + | |
| - | <code java | Tier.java> | + | Stellen wir uns vor, wir entwickeln eine Anwendung für ein Tierheim. Wir |
| + | beginnen mit einer allgemeinen Klasse `Tier`, die grundlegende | ||
| + | Eigenschaften und Methoden für alle Tiere definiert. | ||
| + | |||
| + | ``` java | ||
| // Superklasse | // Superklasse | ||
| public class Tier { | public class Tier { | ||
| Line 41: | Line 50: | ||
| } | } | ||
| - | </code> | + | ``` |
| + | |||
| + | ### Subklasse | ||
| + | |||
| + | Nun erstellen wir eine Subklasse `Hund`, die von der Klasse `Tier` erbt. | ||
| + | Die Klasse `Hund` wird die Eigenschaften und Methoden der Klasse Tier | ||
| + | übernehmen und kann zusätzliche Eigenschaften und Methoden hinzufügen | ||
| + | oder bestehende Methoden überschreiben. | ||
| + | |||
| + | In diesem Beispiel erbt die Klasse `Hund` die Eigenschaften `name` und | ||
| + | `alter` sowie die Methode `makeSound` von der Klasse `Tier`. | ||
| + | |||
| + | ``` java | ||
| + | // Subklasse | ||
| + | public class Hund extends Tier { | ||
| + | private String rasse; | ||
| + | |||
| + | public Hund(String name, int alter, String rasse) { | ||
| + | super(name, alter); // Aufruf des Konstruktors der Superklasse | ||
| + | this.rasse = rasse; | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void makeSound() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | // Getter und Setter | ||
| + | public String getRasse() { | ||
| + | return rasse; | ||
| + | } | ||
| + | |||
| + | public void setRasse(String rasse) { | ||
| + | this.rasse = rasse; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | ``` | ||
| + | |||
| + | #### Aufruf des Konstruktors der Superklasse: | ||
| + | |||
| + | Beachte Zeile 6: Hier wird durch `super(name, | ||
| + | der Superklasse `Tier` aufgerufen und die dort geforderten Parameter | ||
| + | `name` und `alter` übergeben. | ||
| + | |||
| + | Eigenschaften werden immer im Konstruktor der Klasse übergeben, die die | ||
| + | Eigenschaften definiert. | ||
| + | |||
| + | So können auf dem Weg von einer Superklasse zur nächsten Subklasse und | ||
| + | vielleicht sogar noch einer und noch einer Subklasse einige | ||
| + | Eigenschaften und Parameter zusammenkommen. | ||
| + | |||
| + | Immer wenn eine Superklasse Parameter übergeben bekommt, muss in der | ||
| + | Subklasse der **Konstruktor der Superklasse** mit eben diesen Parametern | ||
| + | aufgerufen werden. | ||
| + | |||
| + | Dieser Aufruf findet im Konstruktor statt. | ||
| + | |||
| + | Der Aufruf `super(variable_x, | ||
| + | im Konstruktor**. | ||
| + | |||
| + | ``` java | ||
| + | ... | ||
| + | public Hund(String name, int alter, String rasse) { | ||
| + | super(name, alter); // Aufruf des Konstruktors der Superklasse | ||
| + | this.rasse = rasse; | ||
| + | } | ||
| + | ... | ||
| + | ``` | ||
| + | |||
| + | #### Überschreiben von Methoden der Superklass: \@override | ||
| + | |||
| + | Die Methode `makeSound` wird in der Klasse `Hund` überschrieben, | ||
| + | spezifisches Verhalten für Hunde zu definieren. | ||
| + | |||
| + | ``` java | ||
| + | ... | ||
| + | @Override | ||
| + | public void makeSound() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | ... | ||
| + | ``` | ||
| + | |||
| + | ### Zusammenspiel/ | ||
| + | |||
| + | ``` java | ||
| + | public class Main { | ||
| + | public static void main(String[] args) { | ||
| + | Tier allgemeinesTier = new Tier(" | ||
| + | allgemeinesTier.makeSound(); | ||
| + | |||
| + | Hund meinHund = new Hund(" | ||
| + | meinHund.makeSound(); | ||
| + | |||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | ``` | ||