Sichtbarkeit von Variablen

Hallo www,

ich bin dabei Java als erste Programmiersprache zu lernen. An einer Stelle in meinem Buch komme ich aber nicht weiter, nämlich hier …

Es gibt in Java die Möglichkeit, den Zugriff auf Variablen und Methoden einzuschränken, indem gewisse Schlüsselwörter (Zugriffsmodifizierer) vor die Variablendeklaration bzw. Methodendefinition gesetzt werden.
Public = in allen Paketen verfügbar
kein Modifizierer = innerhalb des selben Pakets verfügbar

ich stelle aber fest, dass Membervariablen (auch wenn sie als „public“ deklariert sind) generell nur innerhalb der eigenen Klasse sichtbar sind.

Kann mir jemand sagen, wie ich den Text aus dem Buch zu interpretieren habe?

Und gleich noch eine Frage:
Wie kann ich von Klasse A auf eine Membervariable die in Klasse B deklariert ist zugreifen?

Vielen Dank fürs Lesen und eure Hilfe!
Andrea

Hallo Andrea,

es gibt insgesammt 4 Zugriffsmodifikatoren: private, default, protected und public. Eine Variable ist default, wenn kein zusätzlicher Modifikator angegeben wurde.

Modifikator | Klasse | Paket | Subklasse | Welt (jeder)
-------------------------------------------------------
public | J | J | J | J
protected | J | J | J | N
default | J | J | N | N
private | J | N | N | N

„Controlling Access to Members of a Class“ oracle.com

Ein kleines Beispiel um es zu verdeutlichen:

package paket1;

public class KlasseA {

 private int privateVar = 1;
 int defaultVar = 2;
 protected int protectedVar = 3;
 public int publicVar = 4;

}

Wenn du jetzt im selben Paket eine andere Klasse erzeugst und ein Objekt der KlasseA anlegst kannst du auf die public, protected und default Variable zugreifen.

KlasseA aObjekt = new KlasseA();
aObjekt.publicVar = 0;

In einer anderen Klassen in einem anderem Paket kannst du auf dem KlasseA-Objekt nur auf die public Variable zugreifen.

Wenn du jetzt in der Klasse im anderem Paket kein Objekt anlegst, sondern diese mit „extends KlasseA“ zu einer Subklasse machst, kannst du auf die public und protected Variable zugreifen.

public class KlasseD extends KlasseA {
 public void methode() {
 this.publicVar = 0;
 }
}

Ich hoffe, ich konnte es verständlich erklären. Wenn du noch weitere Fragen haben solltest, kannst du diese gerne hier im Forum stellen.

Mit freundlichen Grüßen,
clobberstone

Hallo clobberstone,

vielen Dank für deine schnelle und ausführliche Antwort!
Ich denke mal, ich komme ich komme jetzt vorerst alleine weiter - für deine nächtliche Hilfe gibts ein Sternchen.

Vielen Dank nochmals!
Andrea