Sichtbarkeit (auch Zugriffskontrolle) regelt, wer auf Felder und Methoden einer Klasse zugreifen darf. Die wichtigsten Zugriffsmodifikatoren sind public, private und protected. Sichtbarkeit ist das Werkzeug, mit dem die Objektorientierung ihre Ziele Kapselung und Informationsversteckung durchsetzt.

Die drei Grundmodifikatoren

ModifikatorZugriffTypische Verwendung
publicFür alle Code-StellenÖffentliche API, Interface-Methoden
privateNur innerhalb der KlasseInterner Zustand, Hilfsmethoden
protectedKlasse + Subklassen (je nach Sprache auch Paket)Für die Vererbung gedachte Details

Beispiel in Java:

public class Konto {
    private double kontostand;   // nur diese Klasse
    protected long id;          // Klasse + Subklassen
    public double getKontostand() { return kontostand; }
}

Die Instanzvariable kontostand ist privat; nach außen geht nur der Getter.

Sprachunterschiede

  • Java: Ohne Modifikator gilt package-private (Zugriff im selben Paket). protected erlaubt Zugriff im Paket und in Subklassen.
  • C++: Mitglieder von class sind standardmäßig private, Mitglieder von struct standardmäßig public. protected gilt für die Klasse und abgeleitete Klassen.
  • C#: zusätzlich internal für den Zugriff innerhalb der Assembly.
  • Python: Es gibt keine harten Modifikatoren. Konvention: _name bedeutet geschützt, __name wird per Name-Mangling praktisch privat. Die Community vertraut auf Disziplin.

Warum Sichtbarkeit wichtig ist

Private Felder verhindern, dass außenstehender Code den Zustand eines Objekts in einen ungültigen Zustand bringt. Die öffentlichen Methoden bilden den Vertrag; intern darf sich die Implementierung ändern, ohne Nutzer zu brechen — das ist Informationsversteckung, ein Kern der Abstraktion.

Interfaces sind von Natur aus public: Sie legen fest, welche Methoden ein Objekt nach außen anbietet. Overriding in Subklassen kann die Sichtbarkeit nicht einschränken — eine öffentliche Methode darf in der Subklasse nicht privat werden.

Zusammen mit Klassenvariablen gilt: Auch statische Felder sollten private sein und nur über Methoden exponiert werden.