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?
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
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
Ç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
}
Le modificateur d'accès par défaut est package-private - visible uniquement à partir du même package
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
}
}
Le modificateur par défaut est package
. Seul le code du même package pourra appeler ce constructeur.
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.
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;
}
Le modificateur d'accès par défaut est package-private (i.e DEFAULT) et il est visible uniquement du même package.
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.
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
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.
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).