Oi André,
a ideia é que, usando esse recurso, você pode ter um algoritmo base, que é igual para todas as implementações, descrito apenas na classe mãe. Aí, se cada filha tem particularidades sobre uma partezinha do algoritmo, cada uma fica responsável por fazer apenas essa pequena parte.
Então, usando o exemplo do exercício, considere que o código do mostra
é sempre imprimir na tela o nome, o endereço, o cpf,... um monte de dados! Mas a parte da bonificação varia de filha para filha e, se eu colocasse a conta direto no método mostra
ela ficaria irreal para vários casos.
Dado esse cenário, temos duas possibilidades:
1. Reescrever o método mostra
em cada uma das filhas, calculando a conta certa.
2. Chamar o método getBonificação
, que é o responsável por fazer essa conta.
O exercício tinha a intenção de mostrar que, como o cálculo da bonificação é diferente para cada classe filha, não vale a pena a mãe ter uma implementação dele... mas, como sabemos que todo objeto que é um funcionário vai, obrigatoriamente, ter uma implementação do getBonificacao
, podemos confiar que o mostra
estará fazendo o cálculo correto, de acordo com o objeto instanciado.
Fez sentido?