Pergunta

Qual é a diferença na acessibilidade das seguintes variáveis ??em Java?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

Estou mais interessado no que o último está fazendo.

Foi útil?

Solução

  • pública: leitura / escrita para qualquer
  • protegida: leitura / escrita para instâncias de subclasses e de dentro do pacote limitado
  • privada: leitura / escrita para qualquer instância da classe e interior ou exterior (envolvente) instância
  • c int: pacote-privadas, leitura / escrita para todas as classes dentro mesmo pacote

Veja a JLS para mais detalhes

EDIT: Adicionado o comentário para protegido afirmando que o acesso é concedido a partir de mesmo pacote para dentro, vocês são totalmente certo. comentário Também foi adicionado para privado. Lembro-me agora ...; -)

Outras dicas

Desculpe por responder correções para uma resposta anterior, mas eu não tenho reputação suficiente para modificar diretamente ...

  • pública - leitura / escrita para qualquer
  • protegido - leitura / escrita para instâncias subclasses e todas as classes dentro mesmo pacote
  • int c: pacote-privadas, leitura / escrita para todas as classes dentro mesmo pacote
  • privado - leitura / escrita para qualquer membro dessa classe em si e classes internas (se houver)

É melhor encomendar os modificadores de acesso desta forma, a partir do acesso mais amplo (público) para o mais estreito (privado), sabendo que quando se passa de estreito para largo, você não perde nenhum possibilidades.

Isso é particularmente importante para "protegido", onde é muitas vezes incompreendido que as classes no mesmo pacote também pode acessar membros de uma classe (não apenas suas subclasses) protegido.

Eu tento evitar o acesso nível de pacote completamente (o último acesso que você menciona).

Eu gosto de manter aulas de auto-contidas. Se outra classe precisa ter acesso a alguma coisa na minha classe que deveria ser pública (e que deveria por um método, não um atributo). Caso contrário, eu sinto que você tenha quebrado encapsulamento , conforme explicado em Abstraction VS ocultação de informações VS Encapsulation .

E todos estes são proteções tempo de compilação, que pode ser facilmente substituído por meio de reflexão em tempo de execução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top