Vererbung

Angenommen ein Programm für einen Gebrauchtwagenhändler soll erstellt werden. Da sehr unterschiedliche Fahrzeugtypen verwaltet werden sollen, soll auch für jeden Typ eine eigene Klasse erstellt werden. Unmittelbar klar ist jedoch auch, dass die Fahrzeuge einige Gemeinsamkeiten haben. (Fahrgestellnr, Vorbesitzer, Preis, TÜV, ASU, Steuerklasse, …) Damit diese Gemeinsamkeiten nicht für jede Fahrzeugtypklasse neu erstellt werden müssen, kann zunächst eine (Ober-)Klasse fahrzeug erstellt werden, die genau diese Gemeinsamkeiten schon beinhaltet. Beim Erstellen einer neuen (Unter-)Klasse transporter wird angegeben, dass sie die (Ober-)Klasse fahrzeug beerbt. Nun werden sämtliche Attribute und Methoden dieser Klasse vererbt und müssen nicht nochmal implementiert werden. Neue Attribute und neue Methoden können in gewohnter Weise zugefügt werden.

Der Maulwurf

— Fortsetzung des Beispiels Schildkröte aus Objekte. —

Möchte man ein Tier haben, dass sich auch fortbewegen kann, ohne zu zeichnen, gibt es mindestens folgende zwei Möglichkeiten:

  • Man fügt der Klasse Schildkröte eine Methode springe hinzu, die dasselbe macht wie gehe - nur eben nicht zeichnen.
  • Man schreibt eine neue Klasse Maulwurf mit einer neuen Methode, die dasselbe macht wie gehe - nur wiederum nicht zeichnen. Allerdings wird alles andere von der Klasse Schildkröte geerbt.

Die erste Möglichkeit ist vermutlich die einfachere. Jedoch soll hier die zweite behandelt werden, um das Prinzip der Vererbung der objektorientierten Programmierung kennen zu lernen.

  • Zunächst wird eine neue Java-Klasse angelegt, die Maulwurf heißt.
  • Diese Klasse erbt bzw. erweitert (extends) alle Attribute und Merhoden von Schildkröte. - Nur der Konstruktor wird nicht vererbt.
  • Daher muss der Konstruktor und natürlich alle neuen Dinge neu geschrieben werden.

Wichtig:

  • Die Oberklasse muss keinen leeren Konstruktor anbieten. Tut sie dies auch nicht, muss in der Unterklasse aber der Konstruktor der Oberklasse aufgerufen werden. Dies geschieht mit super(…). Dies ist sogar ganz praktisch, da man wieder doppelten Quelltext vermeiden kann.
package Zeichnen;
 
import java.awt.Graphics;
 
/**
 *
 * @author euteneuer
 */
public class Maulwurf extends Schildkröte{
 
    public Maulwurf (double x, double y, double winkel, Graphics g) {
        super (x, y, winkel, g);
    }
 
    public void grabe (double weite) {
        double dx = (double)(weite*Math.sin(bogenmaß));
        double dy = (double)(weite*Math.cos(bogenmaß));
        double xNeu = x+dx;
        double yNeu = y+dy;
        x = xNeu;
        y = yNeu;
    }
}

Folgende Attribute besitzt Maulwurf:

    double winkel;
    double bogenmaß=0;
    double x, y;
    Graphics g;

Folgende Methoden besitzt nun Maulwurf:

    public void setY (double y)
    public void setWinkel (double winkel)
    public void gehe (double weite)
    public void dreheLinks (double winkel)
    public void dreheRechts (double winkel)
    public double getX ()
    public double getY ()
    public double getWinkel ()
    public Graphics getGraphics ()
    public void grabe (double weite)

Den Maulwurf verwenden

Die folgende Methode zeichnet ebenfalls ein Quadrat. Allerdings sind die Kanten doppelt so lang (warum wohl??) und gestrichelt.

    private void bZeichneActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Maulwurf gertrude;
        gertrude= new Maulwurf (200 , 200 , 90 , pZeichenbrett.getGraphics());
        for (int i=1; i<=4; i++) {
            for (int k=1; k<=6; k++) {
                gertrude.gehe(5);
                gertrude.grabe(5);
            }
            fabian.dreheLinks(90);
        }
 
    }
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International