Questão 26 - Programação (JAVA)

Questão:
Ao analisarmos as classes apresentadas abaixo, o que ocorrerá ao executarmos o método main da ClasseExecutavel?

 

(A) Imprimirá 10075.

(B) Imprimirá 7500.0

(C) Imprimirá 7300.0

(D) Imprimirá 7000.0

(E) Imprimirá 10175.0

 

 

Comentário

 

A questão abordou alguns assuntos recentemente cobrados pela FCC: polimorfismo, conversão de tipos (casting) e herança.

A execução inicia-se no método main. A primeira linha deste método declara um objeto do tipo mais genérico (AnalistaJudiciario) e instancia um objeto do tipo mais específico (AnalistaEspTecnologia). Sendo assim, ao invocarmos o método calcularSalarioFinal, ele utilizará a implementação da classe AnalistaEspTecnologia, pois é esta classe que temos em memória no momento da execução.

O próximo conhecimento que deveríamos ter para a resolução da questão é: qual método será executado? o método calcularSalarioFinal (int anoAdmissao, boolean temEspecializacao) ou o método calcularSalarioFinal (long anoAdmissao, boolean temEspecializacao)? Ambos os métodos têm o mesmo nome, porém assinaturas diferentes. O nome desta característica da orientação a objetos é polimorfismo estático. O método executado é o método calcularSalarioFinal(int anoAdmissao, boolean temEspecializacao) da classe AnalistaEspTecnologia. Qual a explicação para isto? Isto ocorre porque o anoAdmissao informado como parâmetro é assumido como int pela JVM. Se desejássemos que o anoAdmissao fosse interpretado como long, deveríamos ter feito uma conversão de tipos.

O cálculo do anuênio não apresenta nenhuma dificuldade (apenas operações matemáticas simples). Só deveríamos saber que o salarioBase considerado é o da classe mais especializada (R$ 7500,00). Sendo assim, o valor do anuênio é de R$ 2175,00. A variável salarioFinal será o resultado da seguinte soma: anuenio (R$ 2175,00) + salarioBase (R$ 7500,00) + gratificacaoEspecialidade (R$ 400,00). A variável salarioFinal valerá R$ 10.075,00.

A grande “pegadinha” da questão foi a expressão: if (temEspecializacao=true). Esse “if” sempre será considerado, pois nele, é feita uma atribuição de valores. A variável temEspecializacao passará a ter o valor true, e a execução “entrará no if”.

Dentro do if, o salarioArredondado (R$ 10.075,00) será acrescido do adicionalEspecializacao (R$ 100,00).         Logo, será impresso o valor R$ 10.175,00.