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.
— 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:
springe
hinzu, die dasselbe macht wie gehe
- nur eben nicht zeichnen.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.
Maulwurf
heißt.Schildkröte
. - Nur der Konstruktor wird nicht vererbt.Wichtig:
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)
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); } }