Vererbung

Klassen könnne von anderen Klassen erben. Das bedeutet, dass sie alle Methoden und Attribute der Elternklasse übernehmen. Vererbung ist ein zentrales Merkmal der objektorientierten Programmierung. Es hilft bereits vorhandene Klassen zu nutzen und erspart einem, den gleich Quelltext für eine ähnliche Klasse noch einmal schreiben zu müssen.

Im Klassendiagramm wird das Erben von einer Klasse durch einen ausgehenden Pfeil mit geschlossener Pfeilspitze dargestellt.

Für die erbende Klasse - auch Unterklasse genannt - sagt man auch, dass sie die Elternklasse erweitert, also von ihr erbt. Mit dem Begriff 'erweitert' wird beschrieben, dass sie alle Attribute und Methoden der Elternklasse besitzt, sie aber auch noch weitere besitzen kann. Zudem kann sie Methoden, die sie erbt auch noch einmal neu definieren. Man sagt dass die Unterklasse eine Methode überschreibt.

Die folgende Implementierung zeigt dies:

Beantworte folgende Fragen mit geeigneten Fachbegriffen.

  1. Warum hat Fiffi einen Namen, obwohl die Klasse Pudel dieses Attribut nicht besitzt?
  2. Warum bellt Fiffi anders als Bello?
  3. Warum möchte Bello kein Männchen machen.
  1. Die Klasse Pudel erbt von der Klasse Hund, die das Attribut name besitzt.'
  2. Die Klassen Pudel überschreibt die Methode bellen und implementiert diese anders als die Klasse Hund.?
  3. Die Klasse Pudel erweitert die Klasse Hund um die Methode macheMännchen(). Diese Methode besitzt nur die Klasse Pudel und nicht die Klasse Hund.

Gegeben ist folgendes Klassendiagramm:

                class Fahrzeug {
                    double preis;
                    String hersteller;
                    double geschwindigkeit;
                    void fahre() {
                       println("Das Fahrzeug fährt...");
                    }
                    void erhöheGeschwindigkeit(int wert) {
                       geschwindigkeit += wert;
                    }
                    double gibPreis() {
                       return preis;
                    }
                 } 
                                                                                           
                 class Auto extends Fahrzeug {
                    double leistung;
                    String kennzeichen;
                    boolean istElektrisch;
                    void fahre() {
                       println("Das Auto macht brumm, brumm...");
                    }
                    void hupe() {
                       println("Tut, tut!!!");
                    }
                   
                 }
                                                                                           
                 class Fahrrad extends Fahrzeug {
                    int anzahlGänge;
                    void fahre() {
                       println("Das Fahrrad rollt vor sich hin...");
                    } 
                    void klingle() {
                       println("Klingeling...");
                    }
                 }
                                                          
                 
                 // Test
                 Fahrzeug f1 = new Fahrzeug();
                 f1.fahre();
                 Auto a1 = new Auto();
                 a1.erhöheGeschwindigkeit(12);
                 a1.fahre();
                 a1.hupe();
                 Fahrrad fa1 = new Fahrrad();
                 fa1.preis = 199.90;
                 fa1.fahre();
                 fa1.klingle();