web-dev-qa-db-fra.com

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 le déclare 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, peuvent appeler ce constructeur?

104
yrazlik

De Java documentation

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

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

Vous pouvez lire l'histoire complète ici (Que j'ai écrit récemment):

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

100
Suresh Atta

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
76
Pradeep

Ça dépend du contexte.

Quand c'est dans 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
}
28
SKG

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

20
Evgeniy Dorofeev

Voici un exemple de code qui devrait résumer le problème pour vous ... En plus de ce qui suit, montrant comment vous ne pouvez pas accéder à un défaut dans un autre paquet, il y a encore une 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 package, mais elle est accessible si la sous-classe est dans le même package.

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
    }
}
9
JTHouseCat

Le modificateur par défaut est package. Seul le code du même package pourra appeler ce constructeur.

5
cahen

Oui, il est visible dans le même package. Tout ce qui est en dehors de ce paquet ne sera pas autorisé à y accéder.

4
Maninder Singh

Le modificateur d'accès de votre constructeur serait package-private (par défaut) . Comme vous avez déclaré la classe publique, elle sera visible partout, mais pas le constructeur. Votre constructeur ne sera visible que dans son package.

package flight.booking;

public class FlightLog // Public access modifier
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight) // Default access modifier
    {
        this.flight = flight;
    }
}

Lorsque vous n'écrivez aucun constructeur dans votre classe, le compilateur génère un constructeur par défaut avec le même modificateur d'accès de la classe. Pour l'exemple suivant, le compilateur générera un constructeur par défaut avec le modificateur public access (identique à class).

package flight.booking;

public class FlightLog // Public access modifier
{
    private SpecificFlight flight;
}
2
Sachin Gorade

Le modificateur d'accès par défaut est package-private (i.e DEFAULT) et il est visible uniquement du même package.

1
Piyush Bhardwaj

Non, vous ne pouvez pas appeler le niveau d'accès par défaut à l'autre package. Mais vous avez l'accès dans le package. Suivez ce lien pour plus de détails.

0
Hariprasath

Le modificateur d'accès de ce constructeur est-il protégé ou package?

Je pense implicitement que votre modificateur d’accès constructeur serait le modificateur d’accès de votre classe. comme votre classe a un accès public, le constructeur aurait implicitement un accès public

0
PermGenError

D'un livre intitulé Programmeur OCA Java SE 7 I :

Les membres d'une classe définie sans utiliser aucun accès explicite Les modificateurs sont définis avec l'accessibilité du package (également appelé par défaut accessibility). Les membres ayant accès au package sont uniquement accessibles à classes et interfaces définies dans le même package.

0

Modificateur d'accès par défaut - Si une classe n'a pas de modificateur (la valeur par défaut, également appelée package-private), elle n'est visible que dans son propre package (les packages sont des groupes nommés de classes associées).

0
Atiq