Pular para o conteúdo principal

Questão de Programação — Java — FGV 2024

ProgramaçãoJava
Código
fg098224
Banca
FGV
Órgão
TJ-AP
Ano
2024
Nível
Superior
Cargo
Apoio Especializado - Tecnologia da Informação - Desenvolvimento de Sistemas
Analise o código Java a seguir, no qual foi ocultada a segunda linha de código.Imagem associada para resolução da questãoO trecho que substitui corretamente a linha tracejada é:
  1. Apublic abstract void X1(String P);
  2. Bpublic static void X1(String P);
  3. Cpublic String X1(String P);
  4. Dpublic void X1(String P);
  5. Epublic X1(String P);
Revelar gabarito e comentário

GabaritoA — public abstract void X1(String P);

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Classes abstratas e métodos abstratos em Java

Gabarito: letra A. A linha oculta deve declarar um método abstrato public abstract void X1(String P);, pois a classe X é abstrata e a subclasse Z implementa esse método — é exatamente o que a alternativa A expressa. A palavra-chave abstract é o que permite que a classe X declare um método sem corpo, obrigando as subclasses concretas a implementá-lo.

Em Java, uma classe abstrata é aquela que não pode ser instanciada diretamente e pode conter métodos abstratos — métodos declarados sem corpo (sem chaves {}), apenas com a assinatura. A finalidade é definir um contrato que as subclasses devem cumprir: toda subclasse concreta é obrigada a fornecer a implementação. No código da questão, a classe X é abstrata e a classe Z a estende, implementando o método X1. Portanto, a segunda linha de X deve ser a declaração de um método abstrato, exatamente como na alternativa A.

A sintaxe de um método abstrato é: modificador_de_acesso abstract tipo_de_retorno nome(parâmetros); — terminando com ponto e vírgula, sem corpo. No caso, o método X1 recebe uma String e retorna void, então a assinatura correta é public abstract void X1(String P);. As demais alternativas falham por motivos distintos: algumas usam static (que não pode ser abstrato), outras alteram o tipo de retorno ou omitem o tipo de retorno, o que é inválido em Java.

Na prática, imagine uma hierarquia de formas geométricas: uma classe abstrata Forma com um método abstrato calcularArea(). Cada subclasse (Circulo, Quadrado) implementa esse método com sua própria fórmula. O mesmo princípio se aplica aqui: X declara o contrato, Z cumpre o contrato.

A pegadinha da banca está em confundir o candidato com modificadores e tipos de retorno. O static é incompatível com abstract — um método estático pertence à classe e não pode ser sobrescrito, enquanto o abstrato exige sobrescrita. Já o tipo de retorno String mudaria o contrato, e a ausência de tipo de retorno é erro de sintaxe. Guarde a regra: método abstrato = sem corpo + subclasse obrigada a implementar.

Método abstrato
  • 1Sintaxe
    • Modificador de acesso
    • abstract
    • Tipo de retorno
    • Nome + parâmetros
    • ; sem corpo
  • 2Regras
    • Classe abstrata
    • Subclasse concreta implementa
    • static é incompatível
    • Sem tipo de retorno = erro
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa A declara public abstract void X1(String P);, que é exatamente a assinatura de um método abstrato: modificador de acesso public, palavra-chave abstract, tipo de retorno void, nome X1, parâmetro String P e ponto e vírgula final, sem corpo. Como a classe X é abstrata, ela pode (e deve, para definir o contrato) declarar métodos abstratos que as subclasses implementam. A classe Z, ao estender X, é obrigada a fornecer a implementação de X1, o que está implícito no código.

Alternativa B — ❌ Incorreta

A alternativa B usa public static void X1(String P);. O modificador static é incompatível com abstract: um método estático pertence à classe e não pode ser sobrescrito, enquanto um método abstrato exige sobrescrita pela subclasse. Além disso, um método static deve ter corpo — não pode ser declarado apenas com ponto e vírgula. Portanto, essa declaração é inválida e não cumpre o papel de método abstrato.

Alternativa C — ❌ Incorreta

A alternativa C declara public String X1(String P);. O tipo de retorno String difere do que a subclasse Z implementa (que retorna void, conforme o contexto). Se a classe X declarasse um método com retorno String, a subclasse Z seria obrigada a implementar um método que retorna String, o que não ocorre. Além disso, sem a palavra-chave abstract, o método precisaria de corpo — a declaração com ponto e vírgula seria inválida. Portanto, está incorreta.

Alternativa D — ❌ Incorreta

A alternativa D declara public void X1(String P);. Sem a palavra-chave abstract, esse método precisaria de um corpo (chaves {}). Como a classe X é abstrata, ela pode declarar métodos abstratos, mas a ausência de abstract torna a declaração inválida — um método concreto não pode terminar com ponto e vírgula sem corpo. Portanto, está incorreta.

Alternativa E — ❌ Incorreta

A alternativa E declara public X1(String P);. Em Java, todo método deve declarar explicitamente o tipo de retorno — não existe omissão de tipo de retorno (diferente de construtores, que não têm tipo de retorno, mas também não têm nome de método com parênteses assim). A ausência do tipo de retorno é um erro de sintaxe. Portanto, está incorreta.

Gabarito: letra A — a única alternativa que declara corretamente um método abstrato, compatível com a classe abstrata X e a implementação na subclasse Z.

Link permanente: /questoes/fg098224