Die oberste Klasse ist die Klasse Object.
A ist eine Spezialisierung von Object und Object eine Generalisierung von A
Sie erbt:
Alle nicht “private” Klassen und Instanzmethoden
Klassen und Instanzvariablen
Eine Kindklasse erbt auch das, was die Elternklasse geerbt hat.
Wenn Klasse A die Elternklasse ist und Klasse B die Kindklasse, wie definiert man den Konstruktor für B, wenn der Konstruktor in A wie folgt aussieht? :
public A(int a) {
this.a = a;
}
public B(int a) {
super(a);
Man muss den Kontruktor von A mit super “überschreiben”.
Wenn die Klasse A diesen Konstruktor hat:
Und die Klasse B diesen:
public B (int a, int b) {
this.b = b;
Welche von den beiden Zeilen funktioniert?
B b = new A(2, 3);
A a = new B(2, 3);
Die zweite Zeile funktioniert, denn man erzeugt ein B und kann es zu einem A umwandeln, da A die Elternklasse von B ist.
Man kann eine Klasse immer zu etwas konvertieren, was weniger speziell ist.
Also vom Vererbungsbaum quasi nach oben.
Überschreibt man in einer Unterklasse eine Methode, sollte man das mit @Override kenntlich machen.
Wird eine Methode nicht überschrieben und eine Unterklasse versucht die Methode auszuführen, wird einfach die in der Oberklasse definierte Methode ausgeführt.
Wenn z.B. die Klasse B die Klasse A erweitert und man auf die Variable int a zugreifen will, welche als private in A gespeichert ist und eigentlich an B vererbt wird, braucht man eine öffentliche Methode in der Klasse A, um z.B. den Wert rauszufinden.
Bsp.:
public int gibA() {
return this.a;
Sonst kann man von der Klasse B aus nicht auf den Wert zugreifen, da die Variable private ist.
Will man mit einer Klasse eigentlich eine Methode der Oberklasse aufrufen und nicht die, die in derselben Klasse definiert ist, muss man das mit “super” machen.
Eine Abstrakte Methode muss in der Unterklasse ausdefiniert werde!
In einer abstrakten Klasse kann abstrakte Methoden und ausdefinierte Methoden haben.
Abstrakte Methoden sehen z.B. so aus:
public abstract gibText();
oder
public abstract boolean passtZu(String suchbegriff);
Sie werden mit dem Modifikator “abstract” deklariert
und enthält nur die Definition des Methodenkopfs
Eine Klasse, die abstrakte Methoden enthält muss als “abstract” deklariert werden! (überschrieben werden)
Bei sogenannten Template-Methoden wird in der (abstrakten) Oberklasse eine Methode definiert, die mithilfe von anderen Methode ein Grundgerüst für z.B. eine Ausgabe vorgibt.
Was in der Methode gibInfo() bei gibBreite() rauskommt hängt dann immer davon ab, was für eine Unterklasse diese methode ausführt.
Dazu muss in der Unterklasse die gibBreite() Methode mit @Override überschrieben werden und muss einen Wert zurückgeben.
Last changed2 years ago