Die Modifikatoren public und private
In der objektorientierten Programmierung (OOP) gibt es verschiedene Paradigmen (hier: vorgeschriebene Muster), an die sich ein Programmierer halten sollte. Dazu gehört auch das Paradigma der Datenkapselung. Dies besagt, daß auf Attribute (Daten) von Objekten nicht direkt, sondern nur per Zugriffsmethoden zugegriffen werden darf, die Daten sind damit für Zugriffe aus der Außenwelt "gekapselt" sie sind sozusagen nicht sichtbar, man spricht auch vom Geheimnisprinzip. Realisiert wird dies in Java durch Modifikatoren, die Attribute und Methoden hinsichtlich ihrer Sichtbarkeit modifizieren können. Diese sind:
public | Die Komponente ist global sichtbar, d.h. auf sie kann von überall her zugegriffen werden. |
protected | Die Komponente ist im Package und in abgeleiteten Klassen sichtbar. |
#leer | Kein Modifier: Die Komponente ist in allen Klassen desselben Package sichtbar. |
private | Die Komponente ist nur in der Klasse selbst sichtbar, sie kann von außerhalb der Klasse nicht gesehen und damit nicht modifiziert werden |
Die Idee des Packages haben Sie noch nicht kennengelernt, ignorieren Sie deshalb bitte den leeren-Modifier sowie den protected-Modifier zunächst einmal. Ein Grund dieser Einrichtung ist es, Schnittstellen zwischen Klassen möglichst präzise zu definieren. Die Programmiersprache ist darauf ausgelegt, daß mehrere Programmierer an einem Programm arbeiten können, ohne sich allzusehr in die Programmteilen, die von einem Kollegen geschrieben wurden, einarbeiten zu müssen. Es mag bei einfachen Programmen zunächst etwas seltsam anmuten, eine einfache Struktur scheinbar sinnlos komplizierter zu machen, die Einrichtung hat jedoch bei komplexen Projekten, an denen mehrere Programmierer arbeiten, durchaus ihren Sinn. Im Idealfall sind alle Attribute einer Klasse mit private versehen, um sie für die Außenwelt abrufbar bzw. setzbar zu machen, gibt es dann jeweils sogenannte get- und set-Methoden, die vom Typ public sind.
Hieraus ergibt sich ein weiterer Vorteil des "Geheimnisprinzips": Mit Hilfe des "kontrollierten Zugriffs" auf Attribute kann geprüft werden, ob die Zuweisung semantisch erlaubt ist oder nicht. Wenn Sie sich an Ihr erstes Java-Programm (die Klasse Hund.java) erinnern: Dort gab es ein Attribut Integer alter, dem eine beliebige Zahl zugewiesen werden konnte, u.a. auch für ein Alter völlig unsinnige Werte wie -1. In einer set-Methode könnte dies nun geprüft werden:
Für Klassen gibt es lediglich zwei Sichtbarkeitsmodifikatoren: public und keinen. public-Klassen können von überall her, nicht modifizierte Klassen nur aus dem eigenen Package aufgerufen werden.