Um arquivo Java pode conter várias classes/interfaces privadas?

Boa noite senhores,

Percebi que posso colocar várias declarações públicas de classe dentro de um mesmo fonte, assim:

// Arquivo nomeado como BomDia.java
public class BomDia {}
class BoaTarde {}
class BoaNoite {}

Também percebi que posso colocar várias declarações públicas de interface dentro de um mesmo fonte, assim:

// Arquivo nomeado como Cafe.java
public interface Cafe {}
interface Almoco {}
interface Janta {}

Outro detalhe é que posso “mixar” várias declarações de classe/interface públicas dentro de um mesmo fonte, assim:

// Arquivo nomeado como BomDia.java
public class BomDia {}
interface Cafe {}
class BoaTarde {}
interface Almoco {}
class BoaNoite {}
interface Janta {}

Buscando informações de “organização de arquivos fonte em Java” encontrei algo descrito na Java Code Conventions no qual não consegui entender:

[quote]3.1 Java Source Files
Each Java source file contains a single public class or interface. When private classes and interfaces are associated with a public class, you can put them in the same source file as the public class. The public class should be the first class or interface in the file.

(fonte: Java Code Conventions)
[/quote]

:arrow: Pergunta: Como assim classes privadas? Não seriam classes privadas internas da classe pública? Ou estou errado e sim, posso ter “trocentas” classes privadas em um arquivo fonte desde que a primeira seja pública ??? :shock:

Porque até onde vão os conhecimentos que recebi na infância, o modificador de uma classe ou interface não pode ser definido como private ou protected a não ser que ela esteja interna à uma classe ou interface public, certo? O que entendo é o seguinte: posso ter um número de classes/interfaces ilimitado dentro de um arquivo fonte sendo que todas as classes/interfaces declaradas no arquivo serão públicas e essas poderão conter classes/interfaces com outros tipos de modificadores sejam public, protected ou private.

Obrigado. Aguardo ajuda! :wink:

Exato em um arquivo vc pode ter n classes, porem só uma pode ser publica

Boa noite Macedo,

Sim, correto. Agora me explica uma coisa observando o código abaixo:

// Arquivo nomeado como BomDia.java
public class BomDia {}
class BoaTarde {}
class BoaNoite {}

A class BoaTarde e BoaNoite usam qual modificador?

Obrigado.

Defaul

temos 4 tipos de modificador
public
defaul
protected
private

quando você não menciona nenhum o compilador coloca por padrao o defaul

[quote=ErickMacedo]temos 4 tipos de modificador
public
defaul
protected
private

quando você não menciona nenhum o compilador coloca por padrao o defaul[/quote]

Entendi!!

E só para concluir: qual a diferença entre public e default? Porque você não pode definir qualquer uma das classes do exemplo anterior como private, protected ou public (exceto public para a classe que leva o nome do arquivo).
Consegue explicar o que ocorre quando estas classes estão em default?

Criar uma classe sem modificador de acesso (acesso default) significa que ela é vísivel apenas no pacote onde está. Criar uma classe com modificador de acesso public significa que ela é vísivel em qualquer pacote.

a classe só pode ter o modificador de acesso public ou Defaul e como eu havia dito um arquivo só pode ter uma classe publica , isso são regras do copilador

Já clareou, a resposta está aqui:
http://www.guj.com.br/java/139087-em-relacao-ao-quarto-nivel-de-controle-de-acesso-a-classes-defaultresolvido

Valew Macedo, abraço. :smiley:

;D