Die Verkehrsampel und die Fußgängerampel haben viele gemeinsame Methoden. Der einzige Unterschied zwischen beiden ist die Anzahl der Lampen.
Um Code-Duplikation zu vermeiden, setzen wir dieses Klassendiagramm um:
Die Klasse Ampel wird hierbei als abstrakte Klasse deklariert. Von einer abstrakten Klasse können keine Objekte erzeugt werden.
In der Biologie wäre zum Beispiel die Klasse Säugetiere eine abstrakte Klasse. Mensch, Hund oder Pottwal sind Unterklassen dieser abstrakten Oberklasse. Ein Mensch ist ein konkretes Objekt, d.h. eine Instanz der Klasse Mensch. Es gibt aber kein konkretes Säugetier. Abstrakte Klassen sind daher allgemein Sammel- oder Oberklassen.
In der abstrakten Klasse Säugetier werden alle Eigenschaften oder Attribute gesammelt, die typisch für Säugetiere sind. Also zum Beispiel die Tatsache, dass sie ein Fell aus Haaren haben, lebende Nachkommmen gebären und diese mit Milch säugen.
Analog können wir alle Attribute und Methoden, die in der Verkehrs- und der Fußgängerampel gemeinsam auftreten in die abstrakte Klasse Ampel auslagern.
Beim Zugriff auf das Feld lampe werden jetzt Fehlermeldungen angezeigt. Sie treten auf, weil wir in der Unterklasse versuchen auf ein private deklariertes Attribut zuzugreifen.
Ändere den Zugriffsmodifikator in der Klasse Ampel so, dass von der Klasse und ihren Unterklassen auf das Attribut zugegriffen werden kann.
zurück | weiter |
---|