Quelle est la portée par défaut d'une méthode en Java?


166

Si je tape:

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

quelle est la portée par défaut de doThis()?

Publique? Protégé? Privé?

Réponses:


264

La portée par défaut est package-private. Toutes les classes d'un même package peuvent accéder à la méthode / champ / classe. Package-private est plus strict que les étendues protégées et publiques, mais plus permissive que l'étendue privée.

Plus d'informations:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
"Package-default est plus strict que ..."
reinaldoluckman

7
Il vaut peut-être aussi la peine de mentionner que "package-private" est une bonne portée à utiliser lors de l'exposition de méthodes pour des tests unitaires externes.
Gary Rowe

1
Si tel est le cas, pourquoi serait-il jamais nécessaire de rendre quelque chose public à moins que vous ne créiez une bibliothèque ou quoi que ce soit à partir duquel les utilisateurs obtiendraient des fonctionnalités pour leur code?
Daniel

2
@ user3858162 La plupart des applications non triviales sont organisées en plusieurs packages, auquel cas la portée publique est nécessaire pour appeler des méthodes à partir d'autres packages.
Esko Luontola

19

Tout ce qui est défini comme package private peut être accédé par la classe elle-même, d'autres classes dans le même package, mais pas en dehors du package, et pas par des sous-classes.

Voir cette page pour un tableau pratique des modificateurs de niveau d'accès ...


9

Sans un modificateur d'accès, un membre de classe est accessible dans tout le package dans lequel il est déclaré. Pour en savoir plus , consultez la spécification du langage Java, §6.6.

Les membres d'une interface sont toujours accessibles au public, qu'ils soient explicitement déclarés ou non.


5

La portée par défaut est "par défaut". C'est bizarre - voir ces références pour plus d'informations.


3
En fait, ce n'est pas le cas: c'est un package privé
Maurice Perry

2
Je ne peux pas supprimer ma réponse car elle a été acceptée. J'encourage Joe à accepter la réponse de @ Esko!
Michael Haren

1
le deuxième lien est cassé (et d'ailleurs, il est facile de rater que ce sont deux liens)
idclev 463035818

1

Java 8 permet désormais l'implémentation de méthodes dans une interface elle-même avec une portée par défaut (et statique uniquement).


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.