Dúvida com Polimorfismo

Eu entrei em uma dúvida agora

Como o objeto identica qual o metodo correto a ser invocado quando uma classe extends a outra?
É na instancia da classe?

ControleDeBonificacoes controle = new ControleDeBonificacoes(); Gerente funcionario1 = new Gerente(); // aqui? funcionario1.setSalario(5000.0); controle.registra(funcionario1); Funcionario funcionario2 = new Funcionario(); // aqui? funcionario2.setSalario(1000.0); controle.registra(funcionario2); System.out.println(controle.getTotalDeBonificacoes());

O objeto identifica o método a ser chamado através de sua assinatura, por exemplo:

public void CadastrarCliente()
{
//implementação do código
}

public void CadastrarCliente(String nome)
{
//implementação do código
}

public void CadastrarCliente(String nome,telefone,email)
{
//implementação do código
}

Nao nao… mas ai é sobrecarga de metodo…

eu estou dando uma olhada na apostila da caelum na parte de poliformismo e la simplismente nao tem sobrecarga… ele passa funcionario e ja identifica qual metodo que deve retornar!

Provavelmente o método registra nao lida com Gerente nem Funcionarios, mas com Empregados (assumindo que tanto Gerente qto Funcionarios
extendem de Empregado )… como tanto gerente qto funcionarios sao empregados, nao há problema… mas note que, com a referencia de Empregado (a superclasse) vc so vai poder usar os metodos definidos NA superclasse

Ele faz mais ou menos assim, sendo bem didático…
Quando vc invoca um método de um objeto, ele checa se este método existe, caso não, ele sobe a instancia ao seu “pai” até chagar na classe Objetc…

[code]public class Funcionario {

public void fazAlgumaCoisa(){
	//Faz qq coisa
}

public void fazUmaCoisaUnica(){
	//Faz qq coisa
}

}

public class Gerente Extends Funcionario {

public void fazAlgumaCoisa(){
	//Faz qq coisa
}

public void fazOutraCoisa(){
	//Faz qq coisa
}

}

Funcionário funcionario = new Funcionario();
funcionario.fazAlgumaCoisa(); //OK
funcionario.fazUmaCoisaUnica(); //OK

Gerente gerente = new Gerente();
gerente.fazAlgumaCoisa(); //Executa o fazAlgumaCoisa sobrescrito pelo Gerente
gerente.fazUmaCoisaUnica(); //Faz o fazUmaCoisaUnica do Funcionário, herdado no extends
gerente.fazOutraCoisa(); //Faz outra coisa, que é só do gerente[/code]