Koordinatengrafik mit Java
HomeAufgabenDruckenJava-Online

Abstrakte Klassen


Eine abstrakte Klasse ist in Java eine Klasse, von der keine Instanzen erzeugt werden. Ihr Zweck besteht darin, eine Basisklasse (Superklasse) zu sein, Methoden und Variablen zu deklarieren, welche von den Subklassen geerbt werden.

Die Verwendung von abstrakten Klassen wird am Beispiel "PizzaKurier"gezeigt. Es können folgende Pizzas bestellt werden:
  Margarita: Tomaten, Mozzarella, Oregano
  Prosciutto: Tomaten, Mozzarella, Schinken
  Vegetariana: Tomaten, Mozzarella, Gemüse
  Napoli: Tomaten, Mozzarella, Schinken, Champignons, Oliven

Da alle Pizzasorten Teig, Tomaten und Mozzarella enthalten, ist es sinnvoll eine Basisklasse Pizza zu deklarieren. Bei der Bestellung muss eine benannte Pizzasorte verlangt werden, denn eine Pizza ohne Sortenangabe existiert nicht. Mit dem Schlüsselwort abstract kann man verhindern, dass eine Applikationsklasse von der Klasse Pizza eine Instanz erstellt.

Die Klasse Pizza hat eine Instanzvariable GPanel p, die als protected deklariert ist, damit alle Subklassen auf sie zugreifen können. Weiter hat sie die folgende Methoden:
public: createPizza(), displayPrice()
protected: drawIngredients(), getPrice()
private: drawDough(), drawTomato(), drawMozzarella()

Die abgeleiteten Klassen erben alle Methoden der Klasse Pizza und müssen die Methoden drawIngredients() und getPrice() überschreiben, da sie in der Klasse Pizza abstract deklariert sind. Damit wird garantiert, dass jede Pizzasorte ihre Zutaten zeichnet und mit ihrem Preis versehen ist. Der Preis wird mit der Methode displayPrice() im GPanel angezeigt. Der Kontruktor der verschiedenen Pizzasorten schreibt die entsprechende Sorte in die Titelzeile.

Die Applikationsklasse PizzaKurier fragt mit einem Inpuddialog nach der gewünschten Pizzasorte. Nachher wird einer Variablen vom Basisklassentyp Pizza ein Wert des entsprechenden Subklassentyp zugewiesen, beispielsweise

Pizza pizza;
pizza = new Margarita();

Dies ist im Sinn der OOP möglich, da eine Margarita auch eine Pizza ist. Nachfolgend kommt die Polymorphie zur Anwendung, da die aufgerufenen Methoden pizza.createPizza() und pizza.displayPrice() erst zur Laufzeit die Information erhalten, welche Pizza gewählt wurde.

Klassendiagramm:

   

Bei der Arbeit mit mehreren Klassen ist es vorteilhaft, anstelle des Online-Editors eine lokale Java-Entwicklungsumgebung zu verwenden. Jede Klasse kann dann in einer separaten Datei gespeichert werden. Im Online-Editor ist dies leider nicht möglich, da sich alle Klassen in einem Editorfenster (einer Datei) befinden. Da sich in einer Source-Datei nur eine public-Klasse befinden darf, wurde der Zugriffsbezeichner public bei den Pizza-Klassen weggelassen.

Download:
Source-Codes aller Klassen zum Downloaden: PizzaKurier1