Szukaj…


Składnia

  • nazwa typu publicznego [= wartość];
  • nazwa typu prywatnego [= wartość];
  • nazwa typu chronionego [= wartość];
  • wpisz nazwę [= wartość];
  • nazwa klasy publicznej {
  • Nazwa klasy{

Uwagi

Z samouczka Java :

Modyfikatory poziomu dostępu określają, czy inne klasy mogą używać określonego pola lub wywoływać określoną metodę. Istnieją dwa poziomy kontroli dostępu:

  • Na najwyższym poziomie - public lub pakiet-prywatny (bez wyraźnego modyfikatora).
  • Na poziomie członka - public , private , protected lub pakiet-prywatny (bez wyraźnego modyfikatora).

Klasę można zadeklarować za pomocą modyfikatora public , w którym to przypadku klasa jest widoczna dla wszystkich klas na całym świecie. Jeśli klasa nie ma modyfikatora (wartość domyślna, znana również jako pakiet-prywatny ), jest widoczna tylko w swoim własnym pakiecie.

Na poziomie członka można również użyć modyfikatora public lub bez modyfikatora ( pakiet-prywatny ), podobnie jak w przypadku klas najwyższego poziomu i o tym samym znaczeniu. Członkowie mają dwa dodatkowe modyfikatory dostępu: private i protected . Modyfikator private określa, że dostęp do elementu można uzyskać tylko w jego własnej klasie. protected modyfikator określa, że dostęp do elementu można uzyskać tylko w jego własnym pakiecie (jak w przypadku pakietu-prywatny ), a ponadto przez podklasę jego klasy w innym pakiecie.

Poniższa tabela pokazuje dostęp do elementów dozwolony przez każdy modyfikator.

Poziomy dostępu:

Modyfikator Klasa Pakiet Podklasa Świat
public Y Y Y Y
protected Y Y Y N.
bez modyfikatora Y Y N. N.
private Y N. N. N.

Członkowie interfejsu

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

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

    public class X {
    }

    class Y {
    }
}

Członkowie interfejsu zawsze mają publiczną widoczność, nawet jeśli pominięto public słowo kluczowe. Zatem zarówno foo() , bar() , TEXT , ANSWER , X i Y mają widoczność publiczną. Jednak dostęp może być nadal ograniczony przez interfejs zawierający - ponieważ MyInterface ma widoczność publiczną, do jego członków można uzyskać dostęp z dowolnego miejsca, ale gdyby MyInterface miał widoczność pakietu, jego członkowie byliby dostępni tylko z tego samego pakietu.

Widoczność publiczna

Widoczny dla klasy, pakietu i podklasy.

Zobaczmy przykład z klasowym testem.

public class Test{
    public int number = 2;

    public Test(){

    }
}

Teraz spróbujmy utworzyć instancję klasy. W tym przykładzie możemy uzyskać dostęp do number ponieważ jest on public .

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

}

Prywatna widoczność

private widoczność umożliwia dostęp do zmiennej tylko przez jej klasę. Są często używane w połączeniu z public programami pobierającymi i ustawiającymi.

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());
    }
}

Widoczność paczki

Bez modyfikatora domyślnie jest widoczność pakietu. Z dokumentacji Java „[widoczność pakietu] wskazuje, czy klasy w tym samym pakiecie co klasa (niezależnie od ich pochodzenia) mają dostęp do członka”. W tym przykładzie z javax.swing

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

DebugGraphics znajduje się w tym samym pakiecie, więc DEBUG_GRAPHICS_LOADED jest dostępny.

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

W tym artykule przedstawiono pewne podstawy tematu.

Chroniona widoczność

Chroniona widoczność powoduje, że ten element jest widoczny dla swojego pakietu wraz z dowolną jego podklasą.

Jako przykład:

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

Teraz rozszerzymy tę klasę i spróbujemy uzyskać dostęp do jednego z jej protected członków.

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

Będziesz także mieć dostęp do protected członka bez rozszerzania go, jeśli uzyskujesz do niego dostęp z tego samego pakietu.

Zauważ, że ten modyfikator działa tylko na członkach klasy, a nie na samej klasie.

Podsumowanie modyfikatorów dostępu członków klasy

Modyfikator dostępu Widoczność Dziedzictwo
Prywatny Tylko klasa Nie można odziedziczyć
Bez modyfikatora / pakietu W paczce Dostępne, jeśli podklasa w pakiecie
Chroniony W paczce Dostępne w podklasie
Publiczny Wszędzie Dostępne w podklasie

Kiedyś istniał private protected modyfikator (oba słowa kluczowe jednocześnie), który można zastosować do metod lub zmiennych, aby uczynić je dostępnymi z podklasy spoza pakietu, ale uczynić je prywatnymi dla klas w tym pakiecie. Zostało to jednak usunięte w wersji Java 1.0 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow