kann mir kurz jemand beantworten wie es sich verhält wenn eine Klasse als public vereinbart wird und darunter Instanzvariablen stehen ohne zusätzliche Vereinbarung von public, private etc.
Haben diese Instanzvariablen dann die Sichtbarkeit public, weil die Klasse ja so vereinbart wurde oder die Standardsichtbarkeit da nichts zusätzlich davor steht?
Ich schätze mal, dass dann die gesamte Klasse public ist, sonst ergibt die Vereinbarung am Anfang ja eigentlich keinen Sinn, aber lieber nochmal nachfragen bevor ich mir was falsches merke. 😇
Nein, das zählt nicht als public. Der Zugriffsmodifiaktor für die Klasse und für Instanz-Variablen ist komplett getrennt und hat quasi nix miteinander zu tun.
Instanz-Variablen ohne modifikator haben die default Sichtbarkeit (manchmal auch als package private bezeichnet), die von den Rechten zwischen protected und private steht.
private: Nur die Klasse
default: Die Klasse + Klassen im gleichen Package
protected: Die Klasse + Klassen im gleichen Package + Subklassen
public: Alle
Das gleiche gilt nun auch für Klassen, damit kann man regeln, wer auf diese Klassen zugreifen kann. (Und analog ebenso bei Methoden).
Die Elemente der Klasse haben alle eine Sichtbarkeit. Diese kann sein:
public, protected, private und "package access". Die ersten Drei werden mit dem entsprechenden Schlüsselwort festgesetzt. Ist kein Schlüsselwort vorhanden, dann ist es "package access". (Aus der JLS: "If none of the access modifiers public, protected, or private are specified, a class member or constructor has package access: it is accessible throughout the package that contains the declaration of the class in which the class member is declared, but the class member or constructor is not accessible in any other package.")
Nein, das zählt nicht als public. Der Zugriffsmodifiaktor für die Klasse und für Instanz-Variablen ist komplett getrennt und hat quasi nix miteinander zu tun.
Instanz-Variablen ohne modifikator haben die default Sichtbarkeit (manchmal auch als package private bezeichnet), die von den Rechten zwischen protected und private steht.
private: Nur die Klasse
default: Die Klasse + Klassen im gleichen Package
protected: Die Klasse + Klassen im gleichen Package + Subklassen
public: Alle
Das gleiche gilt nun auch für Klassen, damit kann man regeln, wer auf diese Klassen zugreifen kann. (Und analog ebenso bei Methoden).
Als Ergänzung: der automatisch hinzugefügte Default-Konstruktor hat immer die gleiche Sichtbarkeit wie die Klasse. (Für alle explizit angegebenen gilt aber das bereits gesagte).