Abstrakte Klasse
Zu diesem Thema gibt es leider noch keinen eigenen Inhalt :(
Nach Recherche verweise ich auf folgende - meiner Ansicht nach - gut geeignete Seite, die danach noch ergänzt wird.
Abstrakte Klasse auf inf-schule
Abstrakte Klassen auf inf-schule.de
Ergänzung
Auf inf-schule (s.o.) wird nicht so richtig deutlich, wie man Abstrakte Klassen eigentlich einsetzt.
Daher folgende Ergänzung:
Geplant ist eine Klasse MobileTeile
, in der in einer Liste geometrische Objekte verwaltet werden, die für den Bau eines Mobile gebraucht werden.
Man kann Kreise und Rechtecke hinzufügen.
Damit man weiß, wie viel Pappe man für das Anfertigen von allen geometrischen Objekten braucht, enthält die Klasse eine Methode gesamtFlaeche()
public class MobileTeile{
// in die folgende Liste koennen geometrische Figuren eingefügt werden,
// d.h. Kreise oder Rechtecke.
private List<GeometrischeFigur> figurenListe;
public MobileTeile(){
figurenListe = new List<>();
}
public void rechteckHinzufuegen(Rechteck pRechteck){
// man kann der figurenListe problemlos ein Rechteck hinzufuegen, denn ein Rechteck ist eine GeometrischeFigur!
figurenListe.append(pRechteck);
}
public void rechteckHinzufuegen(Kreis pKreis){
// man kann der figurenListe problemlos einen Kreis hinzufuegen, denn ein Rechteck ist eine GeometrischeFigur!
figurenListe.append(pKreis);
}
public double gesamtFlaeche(){
double ergebnis = 0;
for(figurenListe.toFirst(); figurenListe.hasAccess(); figurenListe.next()){
// gf kann ein Rechteck oder ein Kreis sein!
GeometrischeFigur gf = figurenListe.getContent();
//hier wird - polymorph - die richtige Methode (fuer den Kreis bzw. das Rechteck) aufgerufen!
ergebnis += gf.berechneFlaeche();
}
}
}
Zusammenhänge mit anderen Konzepten der objektorientierten Programmierung
- Abstrakte Klassen funktionieren nur mit Vererbung.
Da man von einer abstrakten Klasse kein Objekt erzeugen kann, muss man eine Subklasse bilden, die von der abstrakten Klasse erbt. Die Subklasse implementiert dann die abstrakte Methode.
- Abstrakte Klassen sind ausdrücklich dafür gemacht, Polymorphie zu realisieren:
Die Sub-Klassen der abstrakten Klasse implementieren die abstrakten Methoden, d.h. diese Methoden heißen in allen Subklassen und in der abstrakten Superklasse gleich.
Deswegen eignet sich die abstrakte Methode perfekt für einen polymorphen Aufruf.
- Abstrakte Klassen unterscheiden sich von Interface:
- Wenn die Basis-"Klasse" ausschließlich Methoden festlegt, ohne sie zu implementieren, dann nimmt man ein Interface.
- Wenn die Basis-Klasse Attribute und/oder Methoden selber implementiert, dann nimmt man eine abstrakte Klasse.