===== Abstrakte Klassen ===== {{ :polymorphismus:pasted:20230309-175706.png?400 }} Es macht eigentlich **keinen** Sinn, die Methode ''sagwas()'' in der Klasse Tier zu implementieren. Es würde reichen, sie dort nur zu **deklarieren** (''void sagwas();'') und die **Implementierung** (d.h. die Erstellung der Anweisungen in der Methode drin) den Unterklassen ''Katze'' und ''Hund'' zu überlassen. Dies können wir erreichen, indem wir die Klasse Tier und die Methode ''sagwas()'' als **abstract** deklarieren: {{ :polymorphismus:pasted:20230310-115633.png }} **Merke:** \\ * Wird eine Methode in einer Klasse nur **deklariert**, aber nicht **implementiert**, so nennt man sie **abstrakte Methode**. * Eine Klasse, die mindestens eine abstrakte Methode besitzt, heißt **abstrakte Klasse**. * Von einer abstrakten Klasse kann man keine Objekte instanzieren, wohl aber von Unterklassen, bei denen alle abstrakten Methoden implementiert sind. * Der Compiler stellt sicher, dass jede nicht-abstrakte Unterklasse einer abstrakten Klasse für alle abstrakten Methoden eine Implementierung besitzt.
===== Beispiel 2: Raumschiff mit verschiedenen Kanonen ===== {{ :polymorphismus:pasted:20230310-120603.png }}
**Aufgabe: ** \\ \\ Erfinde eine andere Art von Kanone, schreibe eine entsprechende Klasse und probiere sie im obigen Programm aus.