Helmichs Informatik-Lexikon

Gültigkeitsbereich

Attribute, Variablen und Parameter haben einen definierten Gültigkeitsbereich (engl.: scope). Betrachten Sie dazu folgenden Beispiel-Quelltext:

public class Waage
{
   private double gewicht;

   public Waage()
   {
   }
   
   public void wiegen(double gew)
   {
      gewicht = gew;   
   }

   public double idealgewicht()
   {
      double ig;
      
      ig = (gewicht-100) * 0.9;
      return ig;
	}
	
   public void ausgeben()
   {
      System.out.println("Gewicht        :" + gew);
      System.out.println("Idealgewicht   :" + idealgewicht());
   }
}

Attribute wie gewicht werden ganz oben in der Klasse definiert, sie sind daher in der gesamten Klasse gültig. Das heißt, alle Methoden der Klasse können auf alle Attribute zugreifen, diese auslesen und auch verändern.

Gültigkeitsbereich (scope) von Attributen = die gesamte Klasse!

Parameter wie gew werden im Kopf einer Methode deklariert. Sie sind daher nur in dieser einen Methode gültig. Der Parameter gew der Methode wiegen ist also nur in der Methode wiegen vorhanden. Außerhalb dieser Methode gibt es den Parameter nicht.

Gültigkeitsbereich (scope) von Parametern = nur die Methode.

Lokale Variablen wie ig sind nur in der Methode gültig, in der sie deklariert werden, ähnlich also wie Parameter.

Gültigkeitsbereich (scope) von lokalen Variablen= nur die Methode.

Beim Kompilieren des obigen Quelltextes meldet der Compiler einen Fehler, weil die Variable gew in der Methode ausgeben() nicht definiert ist. Vielmehr wurde gew als Parameter in der Methode wiegen() definiert, aber gew ist eben nur in dieser Methode gültig, der Gültigkeitsbereich erstreckt sich nicht auf die Methode ausgeben.

Einfluss der Schlüsselworte public, private und protected auf den Gültigkeitsbereich von Attributen
public class GraphObject
{
   public int xPos, yPos;
   protected int diameter;
   private Color col;
	
   // Konstruktor und Methoden ...
}

In diesem Quelltext-Ausschnitt einer Klasse GraphObject finden wir drei verschiedene Typen von Attributen mit unterschiedlichen Gültigkeitsbereichen, die teils über die Klasse GraphObject hinausgehen.

private

Die als private deklarierte Variable col ist nur in der Klasse GraphObject gültig. Ruft eine andere Klasse, beispielsweise Anwendung, ein Objekt von GraphObject auf, so kann diese Klasse Anwendung nicht auf das private Attribut col zugreifen.

Betrachten Sie folgenden Quelltext-Ausschnitt:

public class Anwendung
{
   GraphObject kreis;
	
   // Konstruktor und Methoden ...

   public void test()
   {
      Color farbe;
      farbe = kreis.col;
   }
}

In der Methode test() wird versucht, der lokalen Variablen farbe den Wert von kreis.col zuzuweisen. Dieser Versuch führt zu einer Fehlermeldung des Compilers, weil auf kreis.col in der Klasse Anwendung nicht zugegriffen werden kann. Der Gültigkeitsbereich eines privaten Attributs erstreckt sich nur auf die eigene Klasse, nicht aber auf Klassen, die Objekte dieser Klasse einbinden.

Wie sieht es aber bei einer Tochterklasse von GraphObject aus?

public class Kreis extends GraphObject
{
   public void test()
   {
      if (col == Color.BLACK)
         // Anweisungen...
	}
}

Auch hier gibt es eine Fehlermeldung des Compilers. Eine Tochterklasse kann nicht auf private Attribute der Mutterklasse zugreifen. Dafür gibt es aber das Schlüsselwort protected.

protected

Dieses Schlüsselwort ermöglicht es, Attribute einer Klasse auch ihren Tochterklassen zur Verfügung zu stellen. Der Gültigkeitsbereich von protected-Attributen erstreckt sich also auf die eigene Klasse sowie auf alle Tochterklassen.

Wäre das Attribut col in der Klasse GraphObject als protected deklariert worden, würde der Compiler in der test()-Methode von Kreis keinen Fehler melden.

public

Alle public-Attribute sind nicht nur in der eigenen Klasse gültig, sondern auch in allen Tochterklassen und zusätzlich in allen Klassen, die Objekte dieser Klasse besitzen.