Recherche…


Syntaxe

  • nom de type public [= valeur];
  • nom de type privé [= valeur];
  • nom de type protégé [= valeur];
  • tapez nom [= valeur];
  • nom de classe publique {
  • nom du cours{

Remarques

A partir du tutoriel Java :

Les modificateurs de niveau d'accès déterminent si d'autres classes peuvent utiliser un champ particulier ou invoquer une méthode particulière. Il y a deux niveaux de contrôle d'accès:

  • Au niveau supérieur - public ou package-private (pas de modificateur explicite).
  • Au niveau des membres: public , private , protected ou package-privé (aucun modificateur explicite).

Une classe peut être déclarée avec le modificateur public , auquel cas cette classe est visible par toutes les classes partout. Si une classe n'a pas de modificateur (valeur par défaut, également appelée package-private ), elle n'est visible que dans son propre package.

Au niveau des membres, vous pouvez également utiliser le modificateur public ou aucun modificateur ( package-private ) de la même manière qu'avec les classes de niveau supérieur et avec la même signification. Pour les membres, il existe deux modificateurs d’accès supplémentaires: private et protected . Le modificateur private spécifie que le membre ne peut être accédé que dans sa propre classe. Le modificateur protected spécifie que le membre ne peut être accédé que dans son propre package (comme avec package-private ) et, en outre, par une sous-classe de sa classe dans un autre package.

Le tableau suivant montre l’accès aux membres permis par chaque modificateur.

Niveaux d'accès:

Modificateur Classe Paquet Sous classe Monde
public Y Y Y Y
protected Y Y Y N
pas de modificateur Y Y N N
private Y N N N

Membres d'interface

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

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

    public class X {
    }

    class Y {
    }
}

Les membres d'interface ont toujours une visibilité publique, même si le mot clé public est omis. Ainsi, foo() , bar() , TEXT , ANSWER , X et Y ont une visibilité publique. Cependant, l'accès peut encore être limité par l'interface contenant - MyInterface ayant une visibilité publique, ses membres peuvent être accédés de n'importe où, mais si MyInterface avait eu la visibilité du package, ses membres n'auraient été accessibles qu'à partir du même package.

Visibilité publique

Visible à la classe, au package et à la sous-classe.

Voyons un exemple avec la classe Test.

public class Test{
    public int number = 2;

    public Test(){

    }
}

Essayons maintenant de créer une instance de la classe. Dans cet exemple, nous pouvons accéder au number car il est public .

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

}

Visibilité privée

private visibilité private permet à une variable d'être uniquement accessible par sa classe. Ils sont souvent utilisés en conjonction avec public getters et les installateurs public .

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

Visibilité du package

Sans modificateur , la valeur par défaut est la visibilité du package. Dans la documentation Java, "[visibilité du package] indique si les classes du même package que la classe (indépendamment de leur parenté) ont accès au membre." Dans cet exemple de javax.swing ,

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

DebugGraphics est dans le même package, de sorte que DEBUG_GRAPHICS_LOADED est accessible.

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

Cet article donne quelques informations sur le sujet.

Visibilité protégée

La visibilité protégée signifie que ce membre est visible pour son package, ainsi que ses sous-classes.

Par exemple:

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

Nous allons maintenant étendre cette classe et essayer d'accéder à l'un de ses membres protected .

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

Vous pourrez également accéder à un membre protected sans le prolonger si vous y accédez à partir du même package.

Notez que ce modificateur ne fonctionne que sur les membres d'une classe, pas sur la classe elle-même.

Résumé des modificateurs d'accès des membres du groupe

Modificateur d'accès Visibilité Héritage
Privé Classe seulement Ne peut pas être hérité
Aucun modificateur / paquet En paquet Disponible si la sous-classe dans le package
Protégé En paquet Disponible dans la sous-classe
Publique Partout Disponible dans la sous-classe

Il était une fois un modificateur private protected (les deux mots-clés à la fois) qui pouvait être appliqué aux méthodes ou aux variables pour les rendre accessibles depuis une sous-classe en dehors du paquet, mais les rendre privées aux classes de ce paquet. Cependant, cela a été supprimé dans la version de Java 1.0 .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow