Sobre a variável raio na linha 3 do programa, pode-se dizer ...
01 class Circulo
02 {
03 private double raio;
04 public Circulo(double r)
05 {
06 raio = r;
07 }
08 public void setRaio(double r)
09 {
10 raio = r;
11 }
12 public double getRaio( )
13 {
14 return raio;
15 }
16 }
17 public classTeste
18 {
19 private static final Circulo roda = new Circulo(5.0);
20 public static void main (String args[ ])
21 {
22 System.out.println(“Raio = “ + roda.getRaio( ));
23 roda.setRaio(7.0);
24 System.out.println(“Novo raio = ”+ roda.getRaio( ));
25 }
26 }
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - por ser um atributo privado, ele só pode ser acessado pelos métodos da própria classe.
Para entender a alternativa correta, é importante conhecer o conceito de encapsulamento em programação orientada a objetos, um dos pilares fundamentais do Java. Encapsulamento é a técnica de ocultar os detalhes de implementação de uma classe, expondo apenas o que é necessário para o uso da classe por outras partes do código.
No contexto da questão, o atributo raio da classe Circulo é declarado como private, o que significa que ele só pode ser acessado diretamente dentro da própria classe Circulo. Isso é uma aplicação direta do encapsulamento, permitindo que a classe controle como esse atributo é acessado e modificado. Os métodos setRaio(double r) e getRaio() são os métodos públicos fornecidos para permitir a manipulação segura do atributo raio.
A alternativa correta (A) está correta justamente porque respeita o princípio do encapsulamento. Os outros métodos da classe Circulo podem acessar e modificar o atributo raio porque fazem parte da mesma classe, mas qualquer tentativa de acesso direto ao atributo raio a partir de outras classes resultaria em um erro de compilação, a não ser que esse acesso seja feito por meio dos métodos públicos de acesso (getters/setters).
Vamos ver brevemente por que as outras alternativas não são corretas:
- B - Especializações da classe (subclasses) não têm acesso direto a atributos privados de suas superclasses. Elas precisariam de métodos de acesso (como getters/setters) para isso.
- C - Atributos privados são herdados por especializações (subclasses), mas não podem ser acessados diretamente por elas; ainda assim, eles existem nas subclasses.
- D - Não é uma regra que um atributo privado deva receber um valor no construtor; isso é uma decisão de design baseada na necessidade da classe.
- E - Métodos de qualquer tipo de visibilidade (private, public, etc.) dentro da mesma classe podem acessar atributos privados, não apenas métodos privados.
Entendendo esses conceitos, fica mais fácil identificar a correta aplicação do encapsulamento e a visibilidade dos atributos dentro de uma classe em Java.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo