Questão nº 38
Questão de Tecnologia da Informação · FCC SEGEP-MA 2018 (nº 38)
Considere uma aplicação com as classes Java abaixo, criadas em um ambiente de programação ideal.
```java
package pac2;
public class Processo {
private String numeroProcesso;
protected void setNumeroProcesso(String numeroProcesso) {
this.numeroProcesso = numeroProcesso;
}
}
package pac1;
import pac2.Processo;
public class Principal {
public static void main(String[] args) {
Processo p = new Processo();
p.setNumeroProcesso("2000.01.1.000001-5");
}
}
```
Ao compilar a aplicação, ocorrerá um erro que poderá ser resolvido se
- Ao atributo `numeroProcesso` for trocado de `String` para `int`.
- Bantes da declaração da classe `Processo` for incluída a instrução `import pac1.Principal;`.
- Co método `setNumeroProcesso` for trocado de `protected` para `public`. (alternativa correta)
- Dfor criado um construtor explícito na classe `Processo`, necessário para se instanciar o objeto `p` na classe `Principal`.
- Eo método `setNumeroProcesso` for trocado de `protected` para `private`.
Resposta comentada
Gabarito Alternativa C
Encapsulamento em Java é a prática de agrupar dados (atributos) e os métodos que operam sobre esses dados em uma única unidade (uma classe), controlando o acesso a eles através de modificadores de acesso.
- (A) Incorreta: O tipo do atributo
numeroProcesso(String ou int) não afeta a visibilidade ou acessibilidade do métodosetNumeroProcesso. O erro é de acesso, não de tipo de dado. - (B) Incorreta: A instrução
importserve para referenciar classes de outros pacotes pelo nome simples, não para alterar as regras de acesso dos membros de uma classe. ImportarPrincipalemProcessonão resolveria o problema de acesso dePrincipalao métodoprotecteddeProcesso. - (C) Correta: O método
setNumeroProcessoéprotected, o que significa que ele é acessível apenas dentro do mesmo pacote (pac2) ou por subclasses deProcesso. Como a classePrincipalestá em um pacote diferente (pac1) e não é uma subclasse deProcesso, ela não pode acessar o métodoprotected. Ao trocar o modificador de acesso parapublic, o método se torna acessível de qualquer lugar, incluindo a classePrincipalempac1, resolvendo o erro de compilação. - (D) Incorreta: Java fornece um construtor padrão sem argumentos (
public Processo()) automaticamente se nenhum construtor explícito for definido na classe. Portanto, a linhaProcesso p = new Processo();não causaria erro de compilação. A armadilha aqui é desviar a atenção para a criação do objeto, quando o problema real está na chamada do métodosetNumeroProcesso. - (E) Incorreta: Mudar o método de
protectedparaprivateo tornaria ainda menos acessível (apenas dentro da própria classeProcesso), agravando o problema de acesso em vez de resolvê-lo.
Fonte: FCC SEGEP-MA 2018 Analista Executivo - Programador de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.