Eine Klasse sollte nur so viel offen darlegen, wie für die Nutzer der Klasse unbedingt erforderlich. Alles was in der Klasse verborgen ist, kann später ohne Auswirkung auf andere Klassen verändert werden. Innerhalb einer Klasse sind alle Methode, Konstruktoren und Instanzvariablen sichtbar. Damit die Daten und Methoden einer Klasse vor externem Zugriff geschützt oder ausdrücklich für andere wiederum als öffentlich sichtbar markiert sind, gibt es unterschiedliche Sichtbarkeiten:
öffentlich (public)
privat (private)
paketsichtbar (keine Angabe zur Sichtbarkeit)
geschützt (protected)
Elemente des Typs private sind lediglich in der Klasse selbst sichtbar. Für abgeleitete Klassen und für Aufrufer von Instanzen bleiben private-Variablen verdeckt. Der Sichtbarkeitsmodifizierer private verbietet also allen von außen zugreifenden Klassen den Zugriff. Mit einer Ausnahme: Private Eigenschaften sind nur für andere Klassen privat, aber nicht für die eigene, auch wenn die Objekte unterschiedlich sind. Es ist eine Art Spezialfall, dass über eine Referenzvariable der Zugriff auf eine private Eigenschaft eines anderen Objekts erlaubt ist.
private-Elemente sollten immer dann verwendet werden, wenn implementierungsabhängige Details zu verstecken sind, die auch in abgeleiteten Klassen nicht sichtbar sein sollen.
Sichtbarkeiten in der UML
Der Sichtbarkeitsmodifizierer public an Klassen, Konstruktoren, Methoden und sonstigen Klasseninnereien bestimmt, dass alle diese ausgezeichneten Elemente von außen für jeden sichtbar sind. Es spielt dabei keine Rolle, ob sich der Nutzer im gleichen oder in einem anderen Paket befindet.
Ist zwar die Klasse public, aber eine Eigenschaft privat, kann eine fremde Klasse dennoch nicht auf die Eigenschaft zurückgreifen. Und ist eine Eigenschaft public, aber die Klasse privat, dann kann eine andere Klasse erst gar nicht an diese Eigenschaft »herankommen«.
Die public-Elemente bilden also in der Regel die für alle sichtbaren Teile einer Klassendefinition und können daher als ihre Schnittstelle angesehen werden.
Elemente des Typs protected sind in der Klasse selbst und in Methoden abgeleiteter (erbenden) Klassen sichtbar. Zusätzlich können Klassen desselben Pakets sie aufrufen. protected-Elemente sind also vor Zugriffen von außen geschützt, können aber von abgeleiteten Klassen verwendet werden.
Elemente, die ohne einen der drei genannten Modifier deklariert wurden, werden als package scoped oder Elemente mit Standard-Sichtbarkeit bezeichnet. Sie sind nur innerhalb des Pakets sichtbar, zu dem diese Klasse gehört. In anderen Paketen sind sie dagegen unsichtbar.