148 votes

Quel est le modificateur d'accès par défaut en Java ?

Quel est le modificateur d'accès par défaut pour une méthode ou une variable d'instance si je ne l'indique pas explicitement ?

Par exemple :

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight)
    {
        this.flight = flight;
    }
}

Le modificateur d'accès de ce constructeur est-il protégé ou package ? Est-ce que d'autres classes du même package, qui est flight.booking appeler ce constructeur ?

132voto

De Java documentation

Si une classe n'a pas de modificateur (la valeur par défaut, également connue sous le nom de package-private), elle n'est visible que dans son propre package (les packages sont des groupes nommés de classes apparentées - vous en apprendrez davantage à leur sujet dans une leçon ultérieure).

Au member level vous pouvez également utiliser le modificateur public ou no modifier (package-private) comme pour les classes de premier niveau, et avec la même signification.

Vous pouvez lire l'article complet ici ( Que j'ai écrit récemment ):

http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html

125voto

pradeep Points 534

De la documentation :

Access Levels
Modifier        Class    Package    Subclass    World
-----------------------------------------------------
public           Y        Y          Y           Y
protected        Y        Y          Y           N
(Default)        Y        Y          N           N
private          Y        N          N           N

43voto

SKG Points 41

Cela dépend du contexte.

Quand c'est à l'intérieur d'une classe :

class example1 {

    int a = 10; // This is package-private (visible within package)

    void method1() // This is package-private as well.
    {
        -----
    }
}

Quand c'est dans une interface :

interface example2 {

    int b = 10; // This is public and static.
    void method2(); // This is public and abstract
}

22voto

Evgeniy Dorofeev Points 52031

Le modificateur d'accès par défaut est package-private - visible uniquement à partir du même package.

16voto

JTHouseCat Points 95

Voici un exemple de code qui devrait à peu près résumer la situation pour vous... En plus de l'exemple ci-dessous, qui montre comment vous ne pouvez pas accéder à un défaut dans un autre paquet, il y a une autre chose.

La valeur par défaut n'est pas accessible dans une sous-classe si la classe qui la sous-classe est dans un autre paquet, mais elle est accessible si la sous-classe est dans le même paquet.

package main;

public class ClassA {
    private int privateVar;
    public int publicVar;
    int defaultVar;
}

package main;

public class ClassB {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Works
        int v3 = a.privateVar;  // Doesn't work

    }
}

package other;

public class ClassC {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Doesn't work
        int v3 = a.privateVar;  // Doesn't work
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X