Quando aplicamos os modificadores de acesso em uma classe Java, qual das seguintes afirmações é verdadeira sobre a visibilidade e acessibilidade dos membros da classe?
Questão
Quando aplicamos os modificadores de acesso em uma classe Java, qual das seguintes afirmações é verdadeira sobre a visibilidade e acessibilidade dos membros da classe?
Alternativas
a. Atributos sem um modificador de acesso especificado (default) podem ser acessados por classes em qualquer pacote dentro do mesmo projeto.
b. Atributos marcados com protected podem ser acessados por classes no mesmo pacote e subclasses, mesmo se estiverem em pacotes diferentes.
c. Atributos marcados com o modificador public são acessíveis apenas dentro da mesma classe onde foram declarados.
d. Métodos declarados como private podem ser acessados por qualquer classe dentro do mesmo pacote.
e. A utilização do modificador default permite que o membro da classe seja acessado globalmente, de qualquer lugar no programa.
Explicação
Vamos analisar as regras de visibilidade em Java:
- public: acessível de qualquer classe, em qualquer pacote.
- Logo, a alternativa (c) é falsa, pois public não restringe ao escopo da própria classe.
- private: acessível apenas dentro da própria classe.
- Logo, a alternativa (d) é falsa, pois private não pode ser acessado por outras classes nem mesmo no mesmo pacote.
- default (package-private): quando não há modificador, o membro é acessível somente dentro do mesmo pacote.
- Logo, a alternativa (a) é falsa, porque não é “qualquer pacote dentro do mesmo projeto”, e sim apenas o mesmo pacote.
- A alternativa (e) também é falsa, pois default não é acesso global.
- protected: acessível por:
- classes do mesmo pacote (mesmo que não sejam subclasses), e
- subclasses mesmo se estiverem em pacotes diferentes (via herança).
- Portanto, a afirmação da alternativa (b) corresponde à regra correta.
Alternativa correta: (b).