FC ConcursosFC Concursos

Questão FC266133

Qual o resultado da impressão ao executamos a classe Homem?

Linguagens de Programação

IDECAN · 2019

Dadas as seguintes classes, todas no mesmo pacote:

 

public class Mamifero {

protected void andar(){

System.out.print("Mamífero andando ");

ouvir();

}

protected void ver(){

System.out.print("Mamífero vendo ");

 

}

protected void ouvir(){

System.out.print("Mamífero ouvindo ");

ver();

}

}

public class Primata extends Mamifero{

protected void andar(){

System.out.print("Primata andando ");

ouvir();

}

}

public class Homem extends Primata{

protected void ver(){

System.out.print("Homem vendo ");

}

public static void main(String args[]){

Mamifero m = new Homem();

m.andar();

}

}

 

Qual o resultado da impressão ao executamos a classe Homem?

  1. Mamífero andando Mamífero ouvindo Mamífero vendo
  2. Primata andando Mamífero ouvindo Homem vendo
  3. Uma exception será lançada: MethodNotFoundException
  4. Mamífero andando Mamífero ouvindo Homem vendo
  5. Primata andando Mamífero ouvindo Mamífero vendo
Mostrar resposta e comentário

Gabarito

B

Comentário do professor

O resultado é: Primata andando Mamífero ouvindo Homem vendo.

Em main criamos Mamifero m = new Homem(), ou seja, há polimorfismo: a referência é do tipo pai, o objeto é do tipo filho. Ao chamar m.andar(), a JVM faz despacho dinâmico e procura a implementação mais específica disponível na hierarquia.

Como Homem não sobrescreve andar(), é usado o andar de Primata, que imprime "Primata andando " e invoca ouvir(). Ouvir() não foi sobrescrito em Primata nem em Homem, então executa a versão de Mamífero, que imprime "Mamífero ouvindo " e chama ver().

Por fim, ver() foi sobrescrito em Homem, portanto imprime "Homem vendo ". A concatenação desses prints produz a saída indicada.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo