← Questões de Programação

Programação · IBFC · 2024

Questão comentada de Programação

Considere o código Java escrito abaixo. public class Veiculo { public void acelerar() { System.out.println("Veículo acelerando"); } } public class Carro extends Veiculo { public void acelerar() { System.out.println("Carro acelerando"); } } Acontece quando o método acelerar () é chamado para o objeto do tipo Carro:

Gabarito: D

Em Java, quando uma classe filha herda de uma classe pai e redefine um método com a mesma assinatura, ocorre o chamado polimorfismo por sobrescrita (override). Na prática, o método executado é o da classe do objeto real em tempo de execução, e não o da referência do tipo mais genérico. Aqui, Carro estende Veiculo e cria sua própria versão de acelerar(), então o comportamento de Carro substitui o de Veiculo para esse objeto. Isso acontece porque o Java usa despacho dinâmico para métodos de instância: ao chamar acelerar() em um objeto do tipo Carro, o programa procura a implementação mais específica disponível na própria classe Carro. Se ela existe, é ela que entra em ação. O método da superclasse fica “guardado na gaveta” como comportamento herdado, mas não é o escolhido nessa chamada específica. Por isso, o gabarito é a letra D. Ao chamar acelerar() em um objeto Carro, apenas o método de Carro é executado, imprimindo "Carro acelerando". Não há erro de compilação, porque a sobrescrita está correta, e também não há execução em sequência dos dois métodos, pois override não empilha comportamentos automaticamente. Resumo de prova: herança dá acesso ao método do pai, mas sobrescrita troca o comportamento do filho. Se a banca mostrar uma classe filha com método igual ao da mãe, pense primeiro em polimorfismo e despacho em tempo de execução.

Continue treinando

Questões relacionadas