Java Instância de acessibilidade variável [duplicado]
-
06-07-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
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.
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.