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.

Foi útil?

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 ...

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