Zoeken…


Syntaxis

  • openbare type naam [= waarde];
  • naam privétype [= waarde];
  • beschermde typenaam [= waarde];
  • typ naam [= waarde];
  • public class name {
  • naam van de klasse{

Opmerkingen

Uit de Java-zelfstudie :

Toegangsniveau-modificatoren bepalen of andere klassen een bepaald veld kunnen gebruiken of een bepaalde methode kunnen aanroepen. Er zijn twee niveaus van toegangscontrole:

  • Op het hoogste niveau - public of pakket-privé (geen expliciete wijziging).
  • Op ledenniveau - public , private , protected of pakket-privé (geen expliciete wijziging).

Een klasse kan worden gedeclareerd bij de modifier public , in welk geval die klasse overal zichtbaar is voor alle klassen. Als een klasse geen modifier heeft (de standaardinstelling, ook wel pakket-privé genoemd ), is deze alleen zichtbaar in het eigen pakket.

Op ledenniveau kunt u ook de public modificatie of geen modificatie ( pakket-privé ) gebruiken, net als bij klassen op het hoogste niveau, en met dezelfde betekenis. Voor leden zijn er twee extra toegangsmodificatoren: private en protected . De private modifier geeft aan dat het lid alleen toegankelijk is in zijn eigen klasse. De protected modifier geeft aan dat het lid alleen toegankelijk is binnen zijn eigen pakket (zoals bij pakket-privé ) en bovendien door een subklasse van zijn klasse in een ander pakket.

De volgende tabel toont de toegang tot leden die door elke modificator is toegestaan.

Toegangsniveaus:

wijziger Klasse Pakket subklasse Wereld
public Y Y Y Y
protected Y Y Y N
geen modificator Y Y N N
private Y N N N

Interface-leden

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

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

    public class X {
    }

    class Y {
    }
}

Interface-leden hebben altijd openbare zichtbaarheid, zelfs als het public trefwoord wordt weggelaten. Dus zowel foo() , bar() , TEXT , ANSWER , X en Y hebben openbare zichtbaarheid. Toegang kan echter nog steeds worden beperkt door de bevattende interface - omdat MyInterface openbare zichtbaarheid heeft, zijn de leden overal toegankelijk, maar als MyInterface had gehad, zouden de leden alleen toegankelijk zijn geweest vanuit hetzelfde pakket.

Publieke zichtbaarheid

Zichtbaar voor de klasse, het pakket en de subklasse.

Laten we een voorbeeld bekijken met de klasse Test.

public class Test{
    public int number = 2;

    public Test(){

    }
}

Laten we nu proberen een instantie van de klas te maken. In dit voorbeeld hebben we toegang tot het number omdat dit public .

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

}

Privé zichtbaarheid

private zichtbaarheid kan een variabele alleen worden geopend door zijn klasse. Ze worden vaak gebruikt in combinatie met public getters en setters.

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

Zichtbaarheid pakket

Zonder modificatie is de standaard zichtbaarheid van pakketten. Uit de Java-documentatie geeft "[pakketzichtbaarheid] aan of klassen in hetzelfde pakket als de klasse (ongeacht hun afkomst) toegang hebben tot het lid." In dit voorbeeld van javax.swing ,

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

DebugGraphics zit in hetzelfde pakket, dus DEBUG_GRAPHICS_LOADED is toegankelijk.

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

Dit artikel geeft enige achtergrondinformatie over het onderwerp.

Beschermd zicht

Beschermde zichtbaarheid veroorzaakt dat dit lid zichtbaar is voor zijn pakket, samen met een van zijn subklassen.

Als voorbeeld:

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

Nu zullen we deze klasse uitbreiden en proberen toegang te krijgen tot een van de protected leden.

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

U kunt ook toegang krijgen tot een protected lid zonder het uit te breiden als u het vanuit hetzelfde pakket gebruikt.

Merk op dat deze modifier alleen werkt op leden van een klasse, niet op de klasse zelf.

Samenvatting van Class Member Access Modifiers

Toegang Modifier Zichtbaarheid Erfenis
Privaat Alleen klasse Kan niet worden geërfd
Geen modifier / pakket In pakket Beschikbaar als subklasse in pakket
beschermde In pakket Beschikbaar in subklasse
Openbaar Overal Beschikbaar in subklasse

Er was ooit een private protected (beide sleutelwoorden tegelijk) modificator die op methoden of variabelen kon worden toegepast om ze toegankelijk te maken vanuit een subklasse buiten het pakket, maar ze privé te maken voor de klassen in dat pakket. Dit werd echter verwijderd in de release van Java 1.0 .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow