Modifiers (Zugriffsmodifizierer)
Kurz: Schlüsselwörter, die festlegen, von wo aus auf eine Klasse, Methode oder Variable zugegriffen werden darf — die technische Grundlage für Kapselung.
Genauer: Typische Stufen sind: öffentlich (von überall zugreifbar), geschützt (nur innerhalb der Klasse und ihrer Unterklassen), paketintern (nur innerhalb desselben Moduls/Pakets) und privat (nur innerhalb der eigenen Klasse). Neben Zugriffsmodifizierern gibt es weitere Modifizierer wie “final” (Wert/Klasse kann nicht mehr verändert bzw. nicht weiter vererbt werden) oder “static” (gehört zur Klasse selbst, nicht zu einem einzelnen Objekt).
Im Detail
Die Sichtbarkeitsstufen bilden üblicherweise eine Hierarchie von “am weitesten offen” bis “am striktesten verborgen”:
public class Konto {
private double saldo; // NUR innerhalb dieser Klasse sichtbar
protected String kontoTyp; // diese Klasse + Unterklassen
String zweigstelle; // paketintern (kein Schlüsselwort = "package-private")
public String kontoNummer; // von überall zugreifbar
}Die Faustregel für gute Kapselung lautet: so restriktiv wie möglich, so offen wie nötig. Felder sollten standardmäßig private sein und nur dann sichtbarer gemacht werden, wenn ein echter, konkreter Grund dafür besteht — nachträglich einen Zugriff zu ÖFFNEN ist meist unproblematisch (bestehender Code funktioniert weiter), einen bereits öffentlichen Zugriff nachträglich zu SCHLIESSEN kann dagegen jeden Code brechen, der sich bereits darauf verlassen hat.
Neben den reinen Zugriffsmodifizierern gibt es weitere, orthogonale Modifizierer:
static: Das Mitglied gehört zur Klasse selbst, nicht zu einer einzelnen Instanz — alle Objekte teilen sich denselben Wert/dieselbe Methode, ein Aufruf braucht kein konkretes Objekt.final: Je nach Kontext bedeutet das “diese Variable kann nach der ersten Zuweisung nicht mehr geändert werden”, “diese Methode kann in Unterklassen nicht überschrieben werden” oder “diese Klasse kann nicht weiter vererbt werden”.abstract: Eine Methode ohne konkrete Implementierung, die von einer Unterklasse zwingend bereitgestellt werden muss (siehe Abstraction).
Diese Modifizierer lassen sich meist kombinieren (public static final ist z. B. der übliche Weg, eine echte, klassenweite Konstante zu definieren) — dabei sind aber nicht alle Kombinationen sinnvoll oder überhaupt erlaubt (ein private abstract z. B. würde bedeuten, eine Methode müsste implementiert werden, wäre aber gleichzeitig für Unterklassen unsichtbar — ein logischer Widerspruch, den die meisten Compiler ablehnen).
Siehe auch: Encapsulation, Classes, Inheritance