Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — FUNDATEC 2023

ProgramaçãoProgramação Orientada a Objetos
Código
qq900043
Banca
FUNDATEC
Órgão
Prefeitura de Farroupilha - RS
Ano
2023
Nível
Superior
Cargo
Analista de Sistemas e Programas
Considerando o programa Java abaixo:Imagem associada para resolução da questãoQual é o resultado de execução desse programa?
  1. AO programa não compila devido a um erro de sintaxe.
  2. BO programa compila e imprime "Au! Au!" duas vezes.
  3. CO programa compila e imprime na ordem "Au! Au!" e "Eu sou um animal.”.
  4. DO programa compila e imprime "Eu sou um animal." duas vezes.
  5. EO programa compila e imprime na ordem "Eu sou um animal." e "Au! Au!".
Revelar gabarito e comentário

GabaritoA — O programa não compila devido a um erro de sintaxe.

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”.

Análise de código Java: herança e polimorfismo

Gabarito: letra A. O programa não compila porque há um erro de sintaxe: a chamada super() deve ser a primeira instrução do construtor da subclasse, e no código ela aparece após a instrução System.out.println("Au! Au!"). Esse é um requisito da linguagem Java, que exige que a invocação ao construtor da superclasse seja a primeira linha do construtor. Au!" antes de chamar super(). Em Java, a chamada a super() (ou this()) deve ser a primeira instrução de um construtor. Se o código tentar executar qualquer outra instrução antes, o compilador acusa erro de sintaxe. Essa regra existe para garantir que a superclasse seja inicializada antes que a subclasse utilize qualquer estado herdado. Vamos entender o mecanismo: quando uma classe estende outra, o construtor da subclasse deve, obrigatoriamente, invocar o construtor da superclasse, seja explicitamente com super(...), seja implicitamente (o compilador insere super() sem argumentos). A chamada explícita, quando feita, precisa ser a primeira linha do construtor. Se houver qualquer comando antes, como um System.out.println, o código não compila. Esse é um erro de sintaxe, pois viola a gramática da linguagem. Na prática, o programador que escreve:

public Cachorro() {
    System.out.println("Au! Au!");
    super();
}

recebe o erro: call to super must be first statement in constructor. A ordem correta seria:

public Cachorro() {
    super();
    System.out.println("Au! Au!");
}

A pegadinha da banca está em confundir o erro de sintaxe com um erro de lógica ou de execução. Muitos candidatos, ao verem a chamada super() fora do lugar, podem pensar que o programa compila e apenas imprime em ordem invertida, ou que imprime duas vezes a mesma mensagem. Mas a regra é rígida: a posição de super() é uma questão de sintaxe, e o compilador rejeita o código antes de qualquer execução.

NÃO CAIA NESSA!

A banca explora a confusão entre erro de sintaxe e erro de execução. O candidato pode achar que o programa compila e imprime as mensagens em alguma ordem, mas a chamada super() fora do lugar impede a compilação. Lembre-se: em Java, super() (ou this()) deve ser a primeira instrução do construtor. Se houver qualquer comando antes, o código não compila.

Alternativa A — ✅ Correta ⟵ GABARITO

O programa não compila devido a um erro de sintaxe. A chamada super() deve ser a primeira instrução do construtor da subclasse. Como o código tenta executar System.out.println("Au! Au!") antes de super(), o compilador acusa erro. Esse é um erro de sintaxe, pois viola a regra gramatical da linguagem.

Alternativa B — ❌ Incorreta

Afirma que o programa compila e imprime "Au! Au!" duas vezes. Isso não ocorre porque o código não compila. Além disso, mesmo que compilasse, a saída dependeria da lógica do programa, que não está descrita. A alternativa ignora o erro de sintaxe.

Alternativa C — ❌ Incorreta

Afirma que o programa compila e imprime "Au! Au!" e depois "Eu sou um animal.". Novamente, o programa não compila. A ordem de execução seria irrelevante, pois o erro de sintaxe impede a compilação.

Alternativa D — ❌ Incorreta

Afirma que o programa compila e imprime "Eu sou um animal." duas vezes. Isso não ocorre, pois o código não compila. A alternativa desconsidera o erro de sintaxe e inventa uma saída que não corresponde ao código.

Alternativa E — ❌ Incorreta

Afirma que o programa compila e imprime "Eu sou um animal." e depois "Au! Au!". O programa não compila, então nenhuma saída é produzida. A alternativa ignora o erro de sintaxe. Gabarito: letra A

Link permanente: /questoes/qq900043