Questão de Programação — Programação Orientada a Objetos — FUNDATEC 2023
Programação›Programaçã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:Qual é o resultado de execução desse programa?
AO programa não compila devido a um erro de sintaxe.
BO programa compila e imprime "Au! Au!" duas vezes.
CO programa compila e imprime na ordem "Au! Au!" e "Eu sou um animal.”.
DO programa compila e imprime "Eu sou um animal." duas vezes.
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