Oi, Diana
Realmente, nesse exemplo não fica tão evidente a vantagem de usar um tipo mais abrangente (Funcionário) para apontar para um objeto mais especializado (Gerente). Esse exemplo dado no curso foi apenas para te deixar ciente de que é possível você criar um objeto Gerente sendo apontado por um tipo Funcionário. Isso foi só pra você enxergar que você pode referenciar um objeto específico com uma variável de tipo mais abrangente.
Ok, mas qual a utilidade disso? Já que você acaba perdendo a possibilidade de usar métodos específicos da classe Gerente?
Pense na seguinte situação: Você acabou de criar um método e você deseja passar um Funcionário como parâmetro neste método, não importa se é Gerente, Administrador, ou qualquer outro, você somente quer que qualquer Funcionário desses possa entrar ali naquele parâmetro. Você quando criou esse método, também não estava interessada em usar nada de específico das classes que herdam de Funcionário, somente estava interessada em usar métodos comuns a todas as classes que herdam de Funcionário. O que você iria fazer?
Solução 1: Criar um método com parâmetro para cada Funcionário?
public void metodoProGerente (Gerente parametro){
//corpo do metodo
}
public void metodoProAdministrador (Administrador parametro){
//corpo do metodo
}
public void metodoProDiretor (Diretor parametro){
//corpo do metodo
}
Solução 2: Ou criar apenas um método que você possa passar qualquer desses Funcionários?
public void metodoPraQualquerFuncionario(Funcionario parametro){
//corpo do metodo
}
Veja se entendeu, nesse último método você pode passar Diretor, Administrador, Gerente... Parece bem melhor não é? :)