Qual é a diferença entre "classe pública" e "classe"?
Eu tenho notado que se não escrever {[[0]} antes de uma classe, o seu trabalho é igual a public class
. Não percebo porquê? Deve mostrar um erro quando eu não declaro uma classe como public
, private
ou protected
. Mas funciona bem. Qual é a razão?
7 answers
public
, protected
e {[2] } são modificadores de acesso. Público significa que o sujeito pode ser acessado por qualquer classe, protegido por subclasse, privado pela própria classe, sem modificador significa "pacote protegido", de modo que o sujeito pode ser acessado por classes do mesmo pacote.
O sujeito é classe, método, variável membro.
Já reparei que se não escrevermos em público antes de uma aula, as obras são iguais às de uma aula pública.A menos que seja público, a aula não será visível para outro código que não esteja no mesmo pacote. A acessibilidade padrão (que não pode ser especificada explicitamente) é que uma classe (ou outro membro) só é visível para outro código dentro do mesmo pacote.
Deve ler a secção 6.6 da especificação da linguagem Java e a secção Java Tutorial (controlando o acesso aos membros de uma classe) para mais detalhes.
As Classes são {[[0]} por omissão (como descrito aqui) por isso não se está a comportar da mesma maneira. Você só acha que é porque você não tentou consumir sua classe a partir de um pacote diferente.
Pergunta semelhante é feita antes de SO. Por favor, Encontre-o aqui.
Para as declarações de classes só existem duas palavras-chave:
- público .Exemplo: estudante de classe pública{//...}
- pacote privado (por omissão) .Exemplo: nota de classe{//... É visível apenas no seu pacote.
Só pode usar privado e protegido se declarar um membro de uma classe. Exemplo:
public class Student{
protected Note note;
}
Se você não der um modificador de acesso é por padrão de pacote de acesso privado. A classe não é acessível fora do pacote. Idealmente, o JLS deveria ter incluído uma palavra-chave para o acesso ao pacote para evitar confusão e consequências não intencionais.
Algo do género:default class Student{}
Funciona da mesma forma apenas porque você está trabalhando com apenas um arquivo e no mesmo pacote.
Se tem mais do que um pacote, então tem o problema. A classe que não tem "público" antes do nome da classe não pode ser criada em outro pacote. Não podes usar o construtor. Você simplesmente não pode acessá-lo fora do pacote em que a classe foi criada.