zum Inhalt springen

(1) Vererbung

Vererbung ist ein weiteres wesentliches Konzept objektorientierter Programmiersprachen. Die Idee dabei ist, dass "Eltern-Klassen" Attribute und Methoden an "Kinder-Klassen" vererben können. In einem Zeichenprogramm gibt es beispielsweise verschiedene Typen wie Kreis, Viereck, Linie etc., die sich zeichnen lassen, und die alle gemeinsame Eigenschaften und Fähigkeiten besitzen (wie Position, Farbe etc.), sich jedoch in einigen Punkten (z.B. in der Form) unterscheiden. Mit Hilfe von Vererbung könnten nun die gemeinsamen Attribute und Methoden in einer Basisklasse (Superklasse) definiert werden, aus der Klassen wie Kreis oder Viereck erben. In dem folgenden Klassendiagramm wird dies veranschaulicht: Die Klasse "DrawedElement" ist die Superklasse für die zu zeichnenden Elemente, die hier Farbe und Position definiert. Davon abgeleitet sind die Klassen Picture, Ellipse und Square, die weitere, speziellere Methoden und Attribute implementieren.

Mit Hilfe der Vererbung lassen sich komplexe Hierarchien erzeugen, da Superklassen auch Subklassen von anderen Superklassen sein können usw. - theoretisch lassen sich also Ableitungshierarchien wie diese konstruieren:

In Java ist die Relation zwischen einer Superklasse und einer Subklasse immer 1:n ("One to many"), d.h. von einer Superklasse können beliebig viele Subklassen abgeleitet werden, aber eine Subklasse kann nur eine Superklasse besitzen. In einigen anderen objektorientierten Programmiersprachen wie bspw. C++ existiert diese Einschränkung nicht, dort kann eine Subklasse aus mehreren Superklassen erben - dies kann jedoch zu Konflikten führen (wenn in den Superklassen gleichlautende Methoden oder Attribute definiert sind o.ä.), weshalb in Java darauf verzichtet und eine Alternativlösung (siehe Abstrakte Klassen und Interfaces) bereitgestellt wurde.

(2) extends

Vererbung wird in Java mit Hilfe des Schlüsselworts extends realisiert: Um eine Klasse aus einer anderen abzuleiten, wird in der Deklaration nach der Bezeichnung der Klasse mit ... extends XYZ angegeben, was die Superklasse der Klasse sein soll.

Innerhalb der Klasse Square.java ist es nun möglich, auf Methoden und Attribute der Superklasse zuzugreifen, als wären sie in der Klasse Square.java selbst definiert:

 

Vererbung wird bspw. in der Programmierung von graphischen Benutzeroberflächen massiv eingesetzt: So gibt es i.d.R. eine Klasse Button (bspw. java.awt.Button), in der die Funktionalität, die ein Knopf bieten muss (Bezeichnung, Icon, Reaktion, wenn die Maus über ihm schwebt etc.), implementiert ist. Wird ein neuer Button benötigt, so wird eine Subklasse von Button angelegt, in der lediglich implementiert werden muss, was genau passieren soll, wenn der Button aktiviert wird. In der Praxis werden Sie feststellen, dass der Zugriff auf Methoden einer Superklasse ein Problem mit sich bringt: Da diese Methoden ja nicht in der Klasse definiert wurden, die Sie grade bearbeiten, wissen Sie nicht immer, welche Methoden es überhaupt gibt. Glücklicherweise bietet Eclipse Ihnen hier eine nützliche Funktionalität: Wenn Sie die Tasten Strg + Leertaste drücken, so wird ein Popup-Menu angezeigt, in dem alle Methoden und Attribute aufgeführt werden, die in der grade bearbeiteten Klasse verfügbar sind. Weitere Möglichkeiten, die sich aus der Idee der Vererbung ergeben, werden in späteren Kapiteln besprochen - wenn Sie bereits jetzt mehr erfahren möchten, so lesen Sie den verlinkten Artikel in Java ist auch eine Insel (Kapitel 5.8) oder Kapitel 10 im RRZN-Skript.

*