Qual è l'ambito predefinito di un metodo in Java?


165

Se scrivo:

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

qual è l'ambito predefinito di doThis()?

Pubblico? Protetta? Privato?

Risposte:


264

L'ambito predefinito è pacchetto-privato. Tutte le classi nello stesso pacchetto possono accedere al metodo / campo / classe. Package-private è più rigoroso di scopi protetti e pubblici, ma più permissivo di ambito privato.

Ulteriori informazioni:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
"Il pacchetto predefinito è più rigoroso di ..."
reinaldoluckman,

7
Potrebbe anche valere la pena ricordare che "pacchetto-privato" è un buon ambito da utilizzare quando si espongono i metodi per i test delle unità esterne.
Gary Rowe,

1
In tal caso, perché mai sarebbe necessario rendere pubblico qualcosa a meno che non si stesse creando una libreria o qualcosa da cui gli utenti avrebbero ottenuto la funzionalità per il loro codice?
Daniel

2
@ user3858162 La maggior parte delle applicazioni non banali sono organizzate in più pacchetti, nel qual caso è necessario un ambito pubblico per chiamare i metodi di chiamata da altri pacchetti.
Esko Luontola,

19

Qualunque cosa definita come pacchetto privato è accessibile dalla classe stessa, altre classi all'interno dello stesso pacchetto, ma non al di fuori del pacchetto e non da sottoclassi.

Vedi questa pagina per una pratica tabella di modificatori del livello di accesso ...


9

Senza un modificatore di accesso, un membro della classe è accessibile in tutto il pacchetto in cui è dichiarato. Puoi saperne di più dalle specifiche del linguaggio Java, §6.6.

I membri di un'interfaccia sono sempre accessibili al pubblico, sia esplicitamente dichiarati o meno.


5

L'ambito predefinito è "predefinito". È strano - vedi questi riferimenti per maggiori informazioni.


3
In realtà non lo è: è pacchetto privato
Maurice Perry,

2
Non riesco a cancellare la mia risposta poiché è stata accettata. Incoraggio Joe ad andare con la risposta di @Esko!
Michael Haren,

1
il secondo collegamento è interrotto (e tra l'altro è facile perdere quelli che sono due collegamenti)
idclev 463035818

1

Java 8 ora consente l'implementazione di metodi all'interno di un'interfaccia stessa con ambito predefinito (e solo statico).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.