Einstieg

In Java exestieren vier Formen der Sichtbarkeit die auf Instanzvariablen und Methoden angewendet werden können.

Die jeweiligen Sichtbarkeiten werden, mit Ausnahme der Sichtbarkeit "default", mit den gleichnamigen Schlüsselwörtern vor der Variable/Methode definiert. Wird keines der Schlüsselwörter public, private oder protected handelt es sich um die "default"-Sichtbarkeit.

Die Definition der Sichtbarkeit, ist derart Elementar, dass Sie in nahezu jeder Java-Klasse anzutreffen ist.

Nachfolgend ein kleines Quelltextbeispiel zur Verdeutlichung der Sichtbarkeiten:

public class Sichtbarkeit {
  private     int ichBinPrivate;
  protected   int ichBinProtected;
  public      int michKoennenAlleSehen;
              int standardSichtbar;
              
  public int getIchBinPrivate(){
    return ichBinPrivate;
  }
  
  protected void setMichKoennenAlleSehen(int michKoennenAlleSehen){
    this.michKoennenAlleSehen = michKoennenAlleSehen;
  }
  
  int getStandardSichtbar(){
    return standardSichtbar;
  }
}
itmapa.de - X2H V 0.18

Sichtbarkeit im Detail

public

Die Sichtbarkeit public besagt, dass die zugehörige Instanzvariable / Methode für alle anderen Klassen erreichbar ist. public hat somit die größte Sichtbarkeit.

private

Die Sichtbarkeit private besagt, dass die zugehö Instanzvariable / Methode nur in der eigenen Klasse sichtbar ist. Im Gegensatz zur Sichtbarkeit public ist die Sichtbarkeit private, die mit der geringsten Sichtbarkeit.

protected

Die Angabe von protected als Sichtbarkeit führt dazu, dass entsprechende Instanzvariablen und Methoden innerhalb des eigenen Packages sichtbar sind. Weiterhin sind sie Sichtbar in abgeleiteten Klassen, unabhängig in welchem Package diese sich befinden.

default

Eine default-Sichtbarkeit liegt vor, wenn keines der vorangegangenen Schlüsselwörter zur Definition der Sichtbarkeit herangezogen wurde. Instanzvariablen und Methoden mit default-Sichtbarkeit sind innerhalb des eigenen Packages sichtbar. Für abgeleitete Klassen in anderen Packages sind sie unsichtbar.

Überdeckung von Instanzvariablen

Innerhalb einer Methode bzw. innerhalb eines Blocks können Variable definiert werden, die den gleichen Namen wie eine Instanzvariable haben. Diese Variable überdecken die Instanzvariablen. Innerhalb des Gültigkeitsbereiches der lokalen Variable bezieht sich die ledigliche Angabe des Variablennamens immer auf die lokale Variable. Um auf die Instanzvariable innerhalb dieses Bereiches zugreifen zu können ist man uf die Hilfe des Schlüsselwortes this angewiesem, dass sich immer auf das jeweilige Objekt bezieht.

Um dieses Verhalten ein wenig zu klären ein kleines Beispiel:

public class Ueberlagerung {
  private String variable;
  
  public static void main(String[] args){
    new Ueberlagerung();
  }
  
  public Ueberlagerung(){
    variable = "Ich bin eine Instanzvariable";
    demo();
  }
  
  public void demo(){
    System.out.println(variable);
    String variable = "Ich bin eine lokale Variable";
    System.out.println(variable);
    System.out.println(this.variable);
  }
}
itmapa.de - X2H V 0.18

Die Ausführung dieser Klasse führt zu folgender Ausgabe auf der Systemausgabe:

Ich bin eine Instanzvariable
Ich bin eine lokale Variable
Ich bin eine Instanzvariable