15.3. Ligação dinâmica

Sabemos que o método vencedores está implementado na classe Jogo de modo a devolver o(s) jogador(es) com melhor pontuação. Sabemos também que este método foi redefinido na classe JogoComObjetivo de modo a devolver todos os jogadores que tenham alcançado a pontuação objetivo.

Na classe JogoNumeroExatoJogadas não redefinimos este método, ou seja, o método vencedores é herdado por esta classe exatamente como foi definido na classe Jogo.

Qual das duas versões do método vencedores é usada em cada uma das duas execuções (quando i toma os valores zero e 1), da seguinte instrução no main do exemplo da secção anterior?

Depende!

Repare que,

 

 

No nosso caso,

Voltemos ao programa ExemploPolimorfismoParametros da secção 15.1 e foquemo-nos agora na seguinte instrução do método imprimeVencedores, que invoca o método vencedores sobre o parâmetro j:

Qual das duas versões do método vencedores é executada dentro do método imprimeVencedores como resultado das seguintes invocações no main?

Aqui o raciocínio é o mesmo: depende!

 

 

 

 


 

Anterior: 15.2. Verificação estática de tipos

Seguinte: 15.4. Invocação indireta de métodos redefinidos