Questão nº 44
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 44)
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 é:
- Apublic abstract void X1(String P); (alternativa correta)
- Bpublic static void X1(String P);
- Cpublic String X1(String P);
- Dpublic void X1(String P);
- Epublic X1(String P);
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 declararX1como um método abstrato emX, a classeZ(que é concreta e herda deX) é obrigada a fornecer uma implementação paraX1. A implementaçãopublic void X1(String P)emZcorresponde 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étodoX1implementado emZ. Isso causaria um erro de compilação, poisZnão estaria implementando corretamente o método deX. - (D) Incorreta:
public void X1(String P);(Armadilha da banca) SeX1fosse um método concreto (não abstrato) emX,Zestaria sobrescrevendo (overriding) esse método, o que é sintaticamente válido. No entanto, o contexto de uma classeabstracte 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;Zpoderia simplesmente herdar a implementação deXseX1fosse concreto emX. 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 classeX. Construtores não têm tipo de retorno e não podem ser abstratos. O método emZ(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.