Qual é o escopo padrão de um método em Java?

165

Se eu digitar:

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

qual é o escopo padrão doThis()?

Público? Protegido? Privado?

Joe Fontana
fonte

Respostas:

264

O escopo padrão é privado do pacote. Todas as classes no mesmo pacote podem acessar o método / campo / classe. O pacote privado é mais rígido que os escopos protegidos e públicos, mas mais permissivo que o escopo privado.

Mais informações:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html

Esko Luontola
fonte
2
"Pacote-padrão é mais rigorosa do que ..."
reinaldoluckman
7
Também vale a pena mencionar que "pacote-privado" é um bom escopo para usar ao expor métodos para teste de unidade externa.
Gary Rowe
1
Se for esse o caso, por que seria necessário tornar público algo a menos que você estivesse criando uma biblioteca ou algo do qual os usuários obtivessem funcionalidade para o código?
Daniel
2
@ user3858162 A maioria dos aplicativos não triviais é organizada em vários pacotes; nesse caso, é necessário um escopo público para chamar métodos de chamada de outros pacotes.
Esko Luontola
19

Qualquer coisa definida como pacote privado pode ser acessada pela própria classe, outras classes dentro do mesmo pacote, mas não fora do pacote e não por subclasses.

Consulte esta página para uma tabela útil de modificadores de nível de acesso ...

user15299
fonte
9

Sem um modificador de acesso, um membro da classe é acessível em todo o pacote em que é declarado. Você pode aprender mais com a Especificação de Linguagem Java, §6.6.

Os membros de uma interface são sempre acessíveis ao público, declarados explicitamente ou não.

erickson
fonte
5

O escopo padrão é "padrão". É estranho - veja essas referências para mais informações.

Michael Haren
fonte
3
Na verdade não é: é pacote-privadas
Maurice Perry
2
Não consigo excluir minha resposta, pois ela foi aceita. Encorajo Joe a aceitar a resposta de @ Esko!
267 Michael Haren
1
a segunda ligação é interrompida (e btw, é fácil perder que aqueles são dois links)
idclev 463035818
1

O Java 8 agora permite a implementação de métodos dentro de uma interface com escopo padrão (e estático apenas).

shiv
fonte