Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


4.10.1

Zugriffsklassen für Datenelemente und Methoden



Die Zugriffsklassen erlauben die gezielte Vergabe von Zugriffsrechten, und zwar einzeln für jede Methode und jedes Datenelement. Folgende Zugriffsklassen sind in Java definiert:

public

Die Zugriffsklasse public erlaubt »weltweiten« Zugriff. Es kann sowohl von außen als auch von allen Unterklassen aus auf das Datenelement oder die Methoden zugegriffen werden.

Abbildung 4.1: Zugriff mit der Zugriffsklasse public
Abbildung 4.1

protected

Bei der Zugriffsklasse protected besteht ein wesentlicher Unterschied zwischen der Bedeutung in C++ und der in Java.

Abbildung 4.2: Zugriff mit der Zugriffsklasse protected
Abbildung 4.2

In C++ ist eine Methode der Zugriffsklasse protected nur in der Klasse verfügbar, in der sie definiert ist, und in allen Unterklassen dieser Klasse. In Java dagegen muss man zusätzlich unterscheiden, ob der Zugriff aus dem Paket erfolgt, in dem die Klasse definiert ist, oder nicht.

Der Zugriff ist grundsätzlich möglich, wenn er aus dem Paket erfolgt, in dem die Klasse definiert ist, und zwar sowohl von einer Unterklasse aus als auch von Nicht-Unterklassen aus. Von anderen Paketen aus ist es lediglich Unterklassen möglich, auf ein protected-Datenelement oder eine protected-Methode zuzugreifen. Nicht-Unterklassen, die außerhalb des Pakets definiert sind, haben keinen Zugriff.

private

Die Zugriffsklasse private ist gewissermaßen das Gegenteil von public. private-Bestandteile sind nur in der Klasse verfügbar, in der sie definiert sind. Von Objekten, die nicht zu dieser Klasse gehören, besteht kein Zugriff. Andere Exemplare der Klasse dürfen aber zugreifen, d. h., ein private-Datenelement darf von einem anderen Exemplar aus verändert werden. private-Bestandteile werden nicht vererbt und sind daher auch nicht in Unterklassen definiert. Wenn eine Unterklasse eine Methode definiert, deren Kopf formal mit dem einer private-Methode der Oberklasse übereinstimmt, so gilt dies nicht als Überschreiben, sondern als Neudefinition.

»friendly«

Ohne die Angabe einer expliziten Zugriffsklasse ist das Datenelement oder die Methode grundsätzlich innerhalb des Pakets sichtbar, in dem die Klasse definiert ist. Das gilt sowohl für Unterklassen als auch für Nicht-Unterklassen. Außerhalb des Pakets ist der Zugriff grundsätzlich nicht möglich, was ebenfalls für Unterklassen und für Nicht-Unterklassen gilt. Diese Zugriffsklasse wird umgangssprachlich auch »friendly« oder »package private« genannt. Diese Zugriffsklasse ist die implizite Voreinstellung, solange keine der drei vorher genannten Klassen spezifiziert wird.

Abbildung 4.3: Zugriff ohne explizite Zugriffsklasse
Abbildung 4.3

Die Zugriffsklassen werden einfach am Anfang der Deklaration eines Datenelements oder einer Methode angegeben:

  public int worldwide;
  private int forInternalUse;
Neben den zuvor genannten Zugriffsklassen war es in den ersten JDK-Versionen auch möglich, einen Bestandteil als private protected zu vereinbaren. Diese Zugriffsklasse hätte es nach der Sprachspezifikation nie geben sollen, ihre Existenz geht auf einen Fehler im Compiler des JDK bis Version 1.0.2 zurück. Im J2SDK 1.4 liefert javac eine Fehlermeldung, wenn diese Zugriffsklasse verwendet wird. Ein als private protected definierter Bestandteil war in der Klasse selbst und in allen Unterklassen verfügbar, und zwar unabhängig davon, in welchem Paket er stand.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.