|
Bestehende Klassen können ohne physikalisches Kopieren erweitert werden. Beispiel: public
class ExtendedStack
extends SimpleStack {
// der Konstruktor
// in diesem einfachen Fall ueberfluessig
public
ExtendedStack() {
super(); // redundant
}
//--------------------
// die zusaetzliche Funktion
public
int get() {
int i = top();
pop();
return i;
}
}
|
| Konstruktoren müssen normalerweise immer in Unterklassen neu implementiert werden, Ausnahme ist der default-Konstruktor. | |
| Der Beerbungsprozess kann beliebig oft wiederholt werden. |
|
2. Vererbungsschritt public
class ExtendedStack2
extends ExtendedStack {
// die zusaetzliche Funktion
public
Stack swap() {
int e1 = get();
int e2 = get();
push(e1);
push(e2);
return this;
}
}
|
|
Bestehende Klassen können mit Vererbung und Redefinition von Methoden in ihrer Funktionalität verändert werden. Beispiel: public
class SaveStack
extends SimpleStack {
// die modifizierte top Methode
public
int top() {
if ( ! preTop() )
throw
new RuntimeException("top with empty stack");
return
super.top();
}
//--------------------
// die modifizierte pop Methode
public
Stack pop() {
if ( ! prePop() )
throw
new RuntimeException("pop with empty stack");
return
super.pop();
}
}
|
|
Die überschriebenen Methoden können immer noch erreicht werden. Das Schlüsselwort super schaltet auf den Namensraum der Oberklasse um. |
|
Bestehende Klassen können mit Vererbung um Datenkomponenten erweitert werden Beispiel: public
class Point {
public
int x;
public
int y;
public
Point() {
this(0,0);
}
public
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
Erweiterung: public
class ColoredPoint
extends Point {
public
int color;
ColoredPoint() {
super(); // redundant: default
color = 0;
}
ColoredPoint(int x, int y, int color) {
super(x,y);
this.color = color;
}
}
|
|
Es können nur zusätzliche Datenfelder definiert werden. Eine Redefinition ist nicht möglich. |
|
| Überdeckte Felder können immer noch über super erreicht werden. |
|
| Letzte Änderung: 10.05.2011 | © Prof. Dr. Uwe Schmidt |