Questão 26 - Programação (JAVA)
(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.
