Lernziele
Zentrale Konzepte in diesem Kapitel: abstrakte Klassen, interfaces, multiple Vererbung
Java Konstrukte in diesem Kapitel: abstract, implements, interface
Notes: Es gibt kein Objekt in unserer Simulation (oder in der Natur), das ausschliesslich ein Tier ist und nicht auch eine Instanz einer spezifischen Subklasse. Solche Klassen, die niemals selbst für die Erzeugung von Objekten verwendet werden sollen und lediglich als Superklassen dienen, werden abstrakte Klassen genannt.
12.1 Abstrakte Methoden
Konzept
Die Definition einer abstrakten Methode besteht aus einem Methodenkopf ohne einen Rumpf. Sie wird miit dem Schlüsselwort abstract markiert.
abstract public void agieren(List<Tier> neueTiere);
Eine abstrakte Methode hat zwei definierende Merkmale:
– Sie wird mit dem Schlüsselwort abstract definiert.
– Sie hat keinen Rumpf. Statdessen wird der Kopf der Methode durch einen Semikolon abgeschlossen.
Da die Methode keinenRumpf hat, kann sie niemals ausgeführt werden, aber sollte kein Problem darstellen.
Obwohl sie keine Implementierung anbieten, garantieren sie dennoch, das alle konkreten Subklassem eine Implementierung dieser Methode anbieten müssen.
12.2 Abstrakte Klasse
Konzept
Eine abstrakte Klasse ist eine Klasse, von der keine Instanzen erzeugt werden sollen. Sie dient ausschliesslich als Superklasse für andere Klassen. Abstrakte Klassen dürfen abstrakte Methoden anbieten
public abstractg class Tier
{
// Datenfelder hier ausgelassen
/**
* Lasse dieses Tier agieren - es soll das tun, was
* es tun muss oder möchte.
* @param neueTiere eine Liste zum Aufnehmen neuer Tiere
*/
abstract public void agiere(List<Tier> neueTiere);
}
Notes: Klassen, die nicht abstrakt sind ( wie alle bisher betrachteten Klassen), werden konkrete Klassen genannt.
Konzept
Abstrakte Subklassen: Damit eine Subklasse einer abstrakten Klasse eine konkrete Klasse werden kann, muss sie Implementierungen für alle geerbten abstrakten Methoden anbieten. Sonst ist die Subklasse selbst ebefalls abstrakt.
Konzept
Superklassen-Methodenaufrufe: Aufrufe von nicht privaten Instanzmethoden aus einer Superklasse heraus werden immer im erweiterten Kontext des dynamischen Typs des Objekts ausgewertet
12.3 Multiple Vererbung
Konzept
Multiple Vererbung: Eine Situation, in der eine Klasse von mehr als einer Superklasse erbt, wird multiple Vererbung genannt,

Multiple Vererbung ist im Prinzip leicht zu verstehen, kann aber zu grossen Schwierigkeiten in der Umsetzung in einer Programmiersprache führen.
Die Sprache java bietet ein anderes Konstrukt, das eine eingeschränkte Form vom multipler Vererbung ermöglicht: INTERFACES
12.4 Interfaces
Konzept
Ein Interface in Java ist eine Spezifikation eines Typs ( in Form eines Typnamens und einer Menge von Methoden). Häufig wird keine Implementierung für die meisten seiner Methoden zur Verfügung gestellt.
Auf den ersten Blick sind Interfaces Klassen sehr ähnlich. In ihrere allgemeinsten Form sind sie abstrakten Klassen, in denen alle MEthoden abstrakt sind, am ähnlichsten.
Die wichtigsten Eigenschaften von Interfaces:
- Im Kopf wir statt des Schlüsselworts class das Schlüsselwort interface verwendet.
- Interfaces enthalten keine Konstruktoren
- Interfaces enthalten keine Instanzfelder
- In einem Interface sind nur konstante Datenfelder (static und final) mit öffentlicher Sichtbarkeit erlaubt. Die Schlüsselwörter public, static, final können deshalb weggelassen werden; sie werden automationsch übernommen.
- Abstrakte Methoden müssen nicht das Schlüsselwort abstract in ihrem Kopf erhalten.
Vor JAva 8 mussten alle Methoden in einem Interface abstrakt sein, aberdie folgenden nicht abstrakten Methodentypen sind nun ebefalls verfügbar:
- Methoden mot dem Schlüsselwort default haben einen Methodenrumpf.
- Methoden mit dem Schlüsselwort statis haben einen Methodenrumpf
Alle Methoden eines Interface – ob abstraktm konkret oder statisch – sind öffentlich sichtbar, das Schlüsselwort public kann somit in ihren Definitionen weggelassen werden.
/**
* Das Interfacem das von allen Klassen erweitert werden muss,
* die an der Simulation teilnehmen wollen.
*/
public interface Akteur
{
/**
* Führe due regelnässige Aktivität des Akteurs aus.
* @param neueAkteuere Liste zum Speichern neu erzeugter Aktuere
*/
void agiere(List<Aktuer> neueAkteure);
/**
* Ist der Akteur noch lebendig?
* @return true, wenn noch aktiv, andernfalls false
*/
boolean istAktiv();
}
Für das Beerben von Interfaces benutzt man: implements
Beispielsweise:
(Wichtig! extends wird immervor implements aufgerufen
public class Fuchs extends Tier implements Zeichenbar
{
}
12.5 Die Klasse Class
Die Class-Klasse ist eine generische Klasse. Sie hat einen Typparameter, der den konkreten Subtyp der Klasse spezifiziert, den wir referenzieren. Der Typ von String.class ist zum Beispiel Class<String>.
Class-Objekte sind besonders nützlich, wenn wir wissen wollen, ob der Typ von zwei Objekten der gleiche ist.
Die Klasse Object definiert die Methode getClasse, die das Class Objekt eines Objekts zurückliefert. Eine andere Möglichkeit, das Class-Objekt für einenen Typ zu erhalten bestet darin, .class nach dem Typnamen zu schreiben, Z.B. int.class
Kommentare