Vererbung
Bei der Modellierung von Klassen stellt man häufig fest, dass sich einige Klassen in Struktur und Verhalten ähneln. In solchen Fällen können die gemeinsamen Teile in einer allgemeineren Klasse zusammengefasst werden (Generalisierung). Umgekehrt lässt sich eine bestehende Klasse um zusätzliche Attribute und Methoden erweitern (Spezialisierung). Die Beziehung zwischen einer speziellen und einer allgemeinen Klasse nennt man Vererbung. Die spezielle Klasse heißt Unterklasse (Sub Class), die allgemeine Oberklasse (Super Class).
Implementieren von Vererbung
Vererbung wird mit dem Schlüsselwort extends realisiert. Attribute und
Methoden der Oberklasse können mit protected als geschützt markiert werden,
sodass Unterklassen darauf zugreifen können.
- Oberklasse
- Unterklasse
public class Computer {
...
protected Cpu cpu;
protected int memoryInGb;
public Computer(String description, Cpu cpu, int memoryInGb) {
this.description = description;
this.cpu = cpu;
this.memoryInGb = memoryInGb;
}
...
}
public class Notebook extends Computer {
private final double screenSizeInInches;
public Notebook(String description, Cpu cpu, int memoryInGb, double screenSizeInInches) {
super(description, cpu, memoryInGb);
this.screenSizeInInches = screenSizeInInches;
}
public double getScreenSizeInInches() {
return screenSizeInInches;
}
}
Im Konstruktor einer Unterklasse muss mit super(...) ein Konstruktor der
Oberklasse aufgerufen werden.
Überschreiben von Methoden
Definiert eine Unterklasse eine Methode mit derselben Signatur wie die
Oberklasse, überschreibt sie diese Methode und ersetzt damit ihre
Implementierung. Die ursprüngliche Implementierung der Oberklasse kann bei
Bedarf über super aufgerufen werden.
- Oberklasse
- Unterklasse
public class Computer {
...
public ArrayList<String> getSpecification() {
ArrayList<String> specification = new ArrayList<>();
specification.add("description: " + description);
specification.add("cpu: " + cpu);
specification.add("memoryInGb: " + memoryInGb);
return specification;
}
...
}
public class Notebook extends Computer {
...
@Override
public ArrayList<String> getSpecification() {
ArrayList<String> specification = super.getSpecification();
specification.add("screenSizeInInches: " + screenSizeInInches);
return specification;
}
...
}
Die Annotation @Override sorgt bei fehlerhaftem Überschreiben der Methode für
entsprechende Kompilierungsfehler.