Begriffe der Objektorientierung in Java


Java unterscheidet Klassen und Instanzen. Klassen können voneinander erben. Java unterstützt ausschließlich Einfach-Vererbung. Das heißt, jede Klasse (außer Object) hat genau einen Vater, und es ergibt sich ein Vererbungsbaum aller Klassen. Object selbst steht an der Spitze des Klassenbaumes und ist irgendwann durch Urzeugung entstanden.

Die Vererbungsrelation ist eine Art-von-Beziehung.

Zu Klassen (jedenfalls zu den meisten Klassen) kann man Instanzen erzeugen. Während Klassen Verhaltensmuster darstellen, tragen Instanzen individuelle Daten und verhalten sich als einzelne Individuen genau so, wie durch ihre Klasse festgelegt. 

Ein kleines Beispiel aus der Tierwelt verdeutlicht die Zusammenhänge:

Tier ist eine Art von Objekt, Elefant und Maus sind Arten von Tieren. dumbo und dimba sind als wirkliche individuell existierende Elefanten Instanzen von Elefant. Gleiches gilt für die Maus jerry; nur ist natürlich jerry eine Instanz von Maus.

Die wesentlichen Elemente einer Klasse sind die Instanzmethoden und die Instanzvariablen. Sowohl Instanzmethoden als auch Instanzvariablen vererben sich. Das heißt, hat Tier eine bestimmte Instanzmethode, so ist diese auch an Elefant oder Maus verfügbar. Hat Tier eine bestimmte Instanzvariable, so ist diese auch an Maus und Elefant verfügbar.

Jede Instanz hat ihren eigenen Satz der entsprechenden Instanzvariablen. So kann man bei Tier eine Instanzvariable alter vereinbaren, die dann auch für Mäuse und Elefanten Bestand hat. Jede mittelbare oder unmittelbare Instanz von Tier hat dann ihre eigene Instanzvariable alter, die das individuelle Alter des entsprechenden Tieres aufnimmt.  

Jede Instanzmethode hat unmittelbar Zugriff auf die Instanzvariablen. Wird die Methode für eine bestimmte Instanz aktiviert, so arbeitet sie unmittelbar mit den Instanzvariablen dieser Instanz.  Den Instanzmethoden stehen die Klassenmethoden und Klassenvariablen gegenüber. Klassenvariablen werden mit dem Schlüsselwort static deklariert. EineKlassenvariable existiert nur einmal für eine Klasse, also nichtgesondert für jede Instanz. Eine Klassenmethode wird ebenfalls mittels  static deklariert. Eine Klassenmethode kann nur auf Klassenvariablen zugreifen. In der Praxis sollte man die Verwendung von static-Elementen vermeiden, da sie bei der Weiterentwicklung von Software in der Regel Probleme bereiten.  Ausnahme von dieser Regel sind die Deklaration von Konstanten mit  static final sowie Sonderanwendungen. 

Wird eine Methode an einer Kindklasse erneut implementiert, so führt das zur Verdeckung. Die neue Definition an der spezielleren Klasse verdeckt die allgemeinere Implementierung. Das ist in der Regel unerwünscht. Manchmal ist es jedoch sinnvoll. Wenn nötig, kann man über super  die verdeckte Methode rufen. Zum Beispiel super.laufe();  Verdeckung kann auch für Instanzvariablen auftreten.