Níveis de acesso de membros da classe Java
-
19-08-2019 - |
Pergunta
Sei que essa é uma pergunta muito básica, mas é uma que sempre me incomodou. Pelo que entendi as coisas, se você declarar um campo privado em Java, isso não é visível fora dessa classe. Se estiver protegido, estará disponível para classes herdadas e qualquer coisa no mesmo pacote (corrija -me se uma dessas definições estiver incorreta).
Isso significa que não é possível declarar um campo acessível apenas a classes herdadas e não a outras classes não-herdadas no mesmo pacote?
Aprecio que existem maneiras de contornar isso, mas há casos em que você gostaria de ter esse tipo de comportamento?
Obviamente, a pergunta acima se aplica a métodos e campos.
Muito Obrigado.
Solução
Ver: http://java.sun.com/docs/books/tutorial/java/javaoo/accesscontrol.html
Pacote> Subclasses, você nunca pode ter um campo apenas visível por subclasses, mas não por classes do mesmo pacote.
Outras dicas
Basicamente:
- Privado: acessível apenas pela classe.
- Público: Acessível por qualquer classe.
- Protegido: acessível pela classe, todas as classes herdadas e as classes do pacote atual (editado).
- Nenhum escopo definido: acessível por todas as classes do pacote atual.
Mais Informações aqui.
Sim, o acesso protegido de Java é um pouco estranho dessa maneira. Não consigo ver imediatamente por que é desejável. Pessoalmente, isso não me incomoda por Campos Como não gosto de campos não privados (além de constantes), mas o mesmo se aplica a outros membros.
O .NET não possui o conceito de visibilidade de acesso ao pacote/namespace, mas possui uma alternativa que é montagem (pense em "arquivo jar" - não exatamente o mesmo, mas fechar). Francamente, eu gostaria de ter namespace e Opções de visibilidade da unidade de implantação, mas parece que estou fadado a decepção ...