Questão nº 44

Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 44)

FGV2024Analista Judiciário - TI - Desenvolvimento de SistemasTecnologia da Informação
Gabarito: Aver comentário ↓

Analise o código Java a seguir, no qual foi ocultada a segunda linha de código.

```
abstract class X {

public void exibe() {
System.out.println("Concluído");
}
}
class Z extends X {
public void X1(String P) {
System.out.println(P);
}
}
class Main {
public static void main(String[] args) {
Z objZ = new Z();
objZ.X1("OK");
objZ.exibe();
}
}
```

O trecho que substitui corretamente a linha tracejada é:

Resposta comentada

Gabarito Alternativa A

Uma classe abstrata (como X no exemplo) é um tipo de classe que não pode ser criada diretamente (você não pode fazer new X()). Ela serve como um "modelo" ou "contrato" para outras classes. Dentro de uma classe abstrata, podemos ter métodos abstratos, que são métodos declarados, mas sem implementação (sem corpo). A regra é: qualquer classe concreta (que pode ser instanciada) que herda de uma classe abstrata deve obrigatoriamente fornecer a implementação para todos os métodos abstratos da sua superclasse, ou então ela mesma terá que ser declarada como abstrata.

  • (A) Correta: public abstract void X1(String P); Ao declarar X1 como um método abstrato em X, a classe Z (que é concreta e herda de X) é obrigada a fornecer uma implementação para X1. A implementação public void X1(String P) em Z corresponde exatamente à assinatura do método abstrato, cumprindo o contrato.
  • (B) Incorreta: public static void X1(String P); Métodos estáticos pertencem à classe, não ao objeto, e não podem ser abstratos. Além disso, não se encaixam no propósito de forçar uma implementação em subclasses.
  • (C) Incorreta: public String X1(String P); O tipo de retorno (String) não corresponde ao tipo de retorno (void) do método X1 implementado em Z. Isso causaria um erro de compilação, pois Z não estaria implementando corretamente o método de X.
  • (D) Incorreta: public void X1(String P); (Armadilha da banca) Se X1 fosse um método concreto (não abstrato) em X, Z estaria sobrescrevendo (overriding) esse método, o que é sintaticamente válido. No entanto, o contexto de uma classe abstract e a necessidade de preencher uma lacuna que é implementada na subclasse sugere fortemente um método abstrato. A principal razão para ter um método abstrato é forçar as subclasses a implementá-lo, o que a alternativa A faz. A alternativa D não força nada; Z poderia simplesmente herdar a implementação de X se X1 fosse concreto em X. A questão testa o conceito de obrigar a subclasse a fornecer uma implementação.
  • (E) Incorreta: public X1(String P); Isso seria um construtor para a classe X. Construtores não têm tipo de retorno e não podem ser abstratos. O método em Z (public void X1(String P)) é um método comum, não um construtor.

Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho