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?

 28
Author: Tushar, 2013-05-27

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.

 27
Author: AlexR, 2013-05-27 19:17:46
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.

 29
Author: Jon Skeet, 2013-05-27 19:16:04

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.

 4
Author: Esteban Araya, 2013-05-27 19:17:03
Deve haver apenas uma classe pública por cada.o ficheiro de código java e o nome do ficheiro devem corresponder a esta classe pública.

Pergunta semelhante é feita antes de SO. Por favor, Encontre-o aqui.

 1
Author: Asad, 2017-05-23 12:17:58

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;
}
 0
Author: Blocked, 2013-05-27 19:33:41

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{}
 0
Author: The_301, 2013-05-27 20:31:02

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.

 0
Author: Morfidon, 2015-07-27 18:31:45