Suche…


Syntax

  • Name des öffentlichen Typs [= Wert];
  • Name des privaten Typs [= Wert];
  • geschützter Typname [= Wert];
  • Typname [= Wert];
  • öffentlicher Klassenname {
  • Klassenname{

Bemerkungen

Aus dem Java-Tutorial :

Zugriffsstufenmodifizierer bestimmen, ob andere Klassen ein bestimmtes Feld verwenden oder eine bestimmte Methode aufrufen können. Es gibt zwei Ebenen der Zugriffskontrolle:

  • Auf der obersten Ebene - public oder package-private (kein expliziter Modifikator).
  • Auf Mitgliedsebene - public , private , protected oder package-private (kein expliziter Modifikator).

Eine Klasse kann mit dem Modifizierer public deklariert werden. In diesem Fall ist diese Klasse für alle Klassen überall sichtbar. Wenn eine Klasse keinen Modifikator hat (der Standard, auch als package-private bezeichnet ), ist sie nur in ihrem eigenen Paket sichtbar.

Auf Mitgliedsebene können Sie ebenso wie bei Klassen der obersten Ebene und mit derselben Bedeutung den Modifizierer public oder no modifier ( package-private ) verwenden. Für Mitglieder gibt es zwei zusätzliche Zugriffsmodifizierer: private und protected . Der private Modifizierer gibt an, dass auf das Member nur in seiner eigenen Klasse zugegriffen werden kann. Der protected Modifier gibt an, dass auf das Mitglied nur innerhalb seines eigenen Pakets (wie bei package-private ) und zusätzlich auf eine Unterklasse seiner Klasse in einem anderen Paket zugegriffen werden kann.

Die folgende Tabelle zeigt den Zugriff auf Mitglieder, die von jedem Modifikator zugelassen werden.

Zugangsebenen:

Modifikator Klasse Paket Unterklasse Welt
public Y Y Y Y
protected Y Y Y N
kein Modifikator Y Y N N
private Y N N N

Interface-Mitglieder

public interface MyInterface {
    public void foo();
    int bar();

    public String TEXT = "Hello";
    int ANSWER = 42;

    public class X {
    }

    class Y {
    }
}

Die Mitglieder der Benutzeroberfläche sind immer öffentlich sichtbar, auch wenn das public Schlüsselwort nicht angegeben wird. Daher sind sowohl foo() auch bar() , TEXT , ANSWER , X und Y öffentlich sichtbar. Der Zugriff kann jedoch immer noch durch die enthaltende Schnittstelle eingeschränkt sein. Da MyInterface öffentlich MyInterface ist, kann auf seine Mitglieder von überall her zugegriffen werden. Wenn MyInterface jedoch MyInterface hatte, waren seine Mitglieder nur aus demselben Paket heraus erreichbar.

Sichtbarkeit der Öffentlichkeit

Sichtbar für die Klasse, das Paket und die Unterklasse.

Sehen wir uns ein Beispiel mit der Klasse Test an.

public class Test{
    public int number = 2;

    public Test(){

    }
}

Versuchen wir nun, eine Instanz der Klasse zu erstellen. In diesem Beispiel können wir auf die number zugreifen, da sie public .

public class Other{
    
    public static void main(String[] args){
        Test t = new Test();
        System.out.println(t.number);
    }

}

Private Sichtbarkeit

private Sichtbarkeit kann auf eine Variable nur von ihrer Klasse zugegriffen werden. Sie werden häufig in Verbindung mit public Getter und Setzern verwendet.

class SomeClass {
    private int variable;

    public int getVariable() {
        return variable;
    }

    public void setVariable(int variable) {
        this.variable = variable;
    }
}

public class SomeOtherClass {
    public static void main(String[] args) {
        SomeClass sc = new SomeClass();
        
        // These statement won't compile because SomeClass#variable is private:
        sc.variable = 7;
        System.out.println(sc.variable);

        // Instead, you should use the public getter and setter:
        sc.setVariable(7);
        System.out.println(sc.getVariable());
    }
}

Paket-Sichtbarkeit

Ohne Modifikator lautet die Standardeinstellung für die Paketsichtbarkeit. In der Java-Dokumentation "zeigt [Paketsichtbarkeit] an, ob Klassen in demselben Paket wie die Klasse (unabhängig von ihrer Abstammung) Zugriff auf das Member haben." In diesem Beispiel von javax.swing

package javax.swing;
public abstract class JComponent extends Container … {
    …
    static boolean DEBUG_GRAPHICS_LOADED;
    …
}

DebugGraphics befindet sich im selben Paket, sodass auf DEBUG_GRAPHICS_LOADED .

package javax.swing;
public class DebugGraphics extends Graphics {
    …
    static {
        JComponent.DEBUG_GRAPHICS_LOADED = true;
    }
    …
}

Dieser Artikel enthält einige Hintergrundinformationen zu diesem Thema.

Geschützte Sicht

Geschützte Sichtbarkeitsursachen bedeuten, dass dieses Member zusammen mit seinen Unterklassen für sein Paket sichtbar ist.

Als Beispiel:

package com.stackexchange.docs;
public class MyClass{
    protected int variable; //This is the variable that we are trying to access
    public MyClass(){
        variable = 2;
    };
}

Jetzt erweitern wir diese Klasse und versuchen, auf eines ihrer protected Mitglieder zuzugreifen.

package some.other.pack;
import com.stackexchange.docs.MyClass;
public class SubClass extends MyClass{
    public SubClass(){
        super();
        System.out.println(super.variable);
    }
}

Sie können auch auf ein protected Mitglied zugreifen, ohne es zu erweitern, wenn Sie von demselben Paket aus darauf zugreifen.

Beachten Sie, dass dieser Modifikator nur für Member einer Klasse und nicht für die Klasse selbst funktioniert.

Zusammenfassung der Zugriffsmodifizierer für Klassenmitglieder

Zugriffsmodifizierer Sichtweite Erbe
Privatgelände Nur Klasse Kann nicht vererbt werden
Kein Modifikator / Paket Im Paket Verfügbar, wenn Unterklasse im Paket
Geschützt Im Paket Verfügbar in Unterklasse
Öffentlichkeit Überall Verfügbar in Unterklasse

Es gab einmal einen private protected (beide Schlüsselwörter gleichzeitig) Modifizierer, der auf Methoden oder Variablen angewendet werden konnte, um sie von einer Unterklasse außerhalb des Pakets aus zugänglich zu machen, sie jedoch für die Klassen in diesem Paket als privat zu definieren. Dies wurde jedoch in der Version von Java 1.0 entfernt .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow