Kleines Nachschlagewerk Informatik
Vererbung
Worum geht es?
Code sollte nur einmal vorkommen. Möchte man die Funktionalität an anderer Stelle ebenso nutzen, sollte man ein Kopieren des Quelltextes vermeiden. Korrigiert man einen Teil, vergisst man den anderen.

Eine elegante Art, Code in verschiedenen Klassen zu nutzen, ist die Vererbung.
Vererbung
Wenn eine Klasse von einer anderen erbt, übernimmt sie alle Attribute und Methoden, sofern diese nicht ausdrücklich als private deklariert wurden.

Daraus folgt zwangsläufig, dass erbende und vererbende Klassen in einer logischen Beziehung stehen müssen. Die erbende Klasse spezialisiert, also verfeinert die vererbende Klasse.
Ein Beispiel
Es gibt Mitarbeiter in einer Firma. Alle haben ein Gehalt und können darüber Auskunft geben. Ebenso arbeiten sie alle. Die Methode arbeiten() allerdings muss verändert werden, denn ihre Tätigkeiten unterscheiden sich.





Werden Methoden oder Attribute ohne Veränderung übernommen, schreibt man sie nicht noch einmal in die Subklasse. In den Subklassen erscheint nur, was neu bzw. verändert wurde.
Überladen und Überschreiben
Diese Begriffe werden oft gleich verwendet, sollten jedoch auseinander gehalten werden.

Überschreiben meint das Verändern einer Methode. Sie hat die gleichen Parameter und Rückgabewerte, verhält sich aber anders. Dies ist z.B. bei der Methode arbeite() der Fall.

Überladen meint das Verwenden des Namens, aber die Veränderung der Parameter. So kann die Methode BerechneBetrag sowohl Zahlen als auch Vektoren als Parameter erhalten.
Polymorphie
Polymorphie (Vielgestaltigkeit) ist der Oberbegriff für Überladen und Überschreiben.
Virtuelle Methoden
Hat man ein Mitarbeiter-Objekt und weiß nicht, von welcher Subklasse (Mechaniker, Sekretärin o.ä.) es abgeleitet wurde, wird beim Aufruf überschriebener Methoden (z.B. arbeite) automatisch die richtige Methode ausgewählt. Dies ist nicht in allen Sprachen so (z.B. C++), dort muss eine Methode ausdrücklich als virtuell markiert werden. In Java sind glücklicherweise alle Methoden virtuell.
Grenzen der Vererbung
Möchte man Vererbung nutzen, müssen die Klassen in eine logische Hierarchie gebracht werden. Es kann aber mehrere Kriterien geben, nach denen man ordnet.

Beispiel: In einem Spiel gibt es Panzer, Autos, Flugzeuge, Hubschrauber, Schiffe, U-Boote etc. Man kann nach Antrieb ordnen, nach Intelligenz, nach Bewaffnung usw.





Wie man es auch wendet, es gibt eine richtige Hierarchie, immer muss man irgendwelchen Code doppelt halten. Die Lösung besteht darin, das Spielobjekt aus mehreren Objekten (Antrieb, Bewaffnung usw,) zusammen zu setzen und die Vererbung für jede Komponente einzeln zu realisieren (Stichwort Komponent-Pattern).