Kontext
Dieses Java-Beispiel stammt aus meinem eigenen Informatik-Unterricht in der gymnasialen Oberstufe und wurde dann von mir 2025 ergänzt um Erkenntnisse aus dem Buch von Lahres et al. [1].
Das Beispiel "Heterogene Liste" deckt folgende Aspekte der OOP ab:
Zielsetzung
Es soll ein Array erstellt werden, in dem Objekte verschiedener Klassen gespeichert werden können. Die entsprechenden Klassen sind Unterklassen einer gemeinsamen Oberklasse.

BlueJ-Klassendiagramm des Projekts
Hier sehen wir zunächst das BlueJ-Klassendiagramm des gessamten Projekts. Kommen wir nun zu den einzelnen Klassen.
class Geofigur

Die Klasse GeoFigur
Da zwei der vier Methoden abstrakt sind, handelt es sich um eine abstrakte Klasse. Das Anzeigen und das Löschen der jeweiligen Figur muss von den Unterklassen implementiert werden. Alle Objekte der Unterklassen besitzen aber die gleichen Instanzvariablen xPos, yPos, width und height, daher kann die abstrakte Klasse GeoFigur Methoden besitzen, die diese Variablen manipulieren.
Hauptmethode von GeoFigur ist verschieben(), dabei geben dx und dy die x- und y-Distanz in Pixeln an, um die die Figur auf der Zeichenfläche verschoben werden soll.
Zunächst muss aber überprüft werden, ob die Figur nicht die Zeichenfläche verlässt, wenn sie verschoben wird. Diese Aufgabe wurde in die Methode neuePositionOK() ausgelagert.
Da es sich hier um keine echte Graphik-Anwendung handelt, sondern nur um eine Fallstudie zur Veranschaulichung von Vererbung, abstrakten Klassen und Überschreiben von Methoden, kann die Methode verschieben() auch einfache Meldungen auf der Konsole ausgeben.
class Kreis

Die Klasse Kreis
Kreis ist eine einfache Klasse und gleichzeitig Unterklasse von GeoFigur. Neue Instanzvariablen wurden nicht deklariert, und es wurde keine Methode von GeoFigur überschrieben. Aber die beiden abstrakten Methoden loeschen() und anzeigen() wurden implementiert.
class Dreieck und class Rechteck
Die beiden Klassen sehen fast genau so aus wie Kreis. Die Konstruktoren nehmen aber vier Parameter entgegen (x, y, width und height), und die Meldungen der Methoden loeschen() und anzeigen() sehen etwas anders aus.
class Quadrat
Diese Klasse ist eine Unterklasse von Rechteck; der Konstruktor nimmt nur die drei Parameter x, y und width entgegen, und die Meldungen in loeschen() und anzeigen() sehen etwas anders aus.
class TestMitArray

Die Klasse TesteMitArray
In den Zeilen 3 und 7 wird ein Array aus Objekten der Klasse GeoFigur angelegt.
Methode auffuellen()
In dieser Methode werden drei Kreis-Objekte, ein Rechteck-Objekt, ein Dreieck-Objekt und ein Quadrat-Objekt hinzugefügt. Anschließend wird die anzeigen()-Methoden der Testklasse aufgerufen.
Methode anzeigen()
In der Methode anzeigen()werden die sechs Objekte mit einer for-Schleife angezeigt, indem die anzeigen()-Methoden der Objekte aufgerufen werden.
Methode verschieben()
In dieser Methode wird jedes GeoFigur-Objekt um dx Pixel horizontal und dy Pixel vertikal verschoben. Da die verschieben()-Methoden der Unterklassen bereits selbst eine Meldung auf der Konsole anzeigen, wurde in dieser Methode auf einen System.out.println()-Befehl verzichtet.
Quellen:
- Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.