Na programação orientada a objetos, ligação dinâmica significa determinar a exata implementação de uma requisição com base no nome da requisição (operação) e no objeto que executa a operação no tempo de execução. Geralmente acontece quando uma função membro de uma classe derivada é invocada usando um ponteiro para sua classe base. A implementação de uma classe derivada será invocada ao invés da operação da classe base. Isto permite a substituição de uma implementação particular usando a mesma interface, o que por sua vez habilita o uso de polimorfismo.
Exemplo
Suponha que todas as formas de vida são mortais. Na programação orientada a objetos, nós podemos dizer que as classes Pessoa e Planta devem implementar a interface Mortal, a qual contém o método Morrer().
Pessoas e Plantas morrem em diferentes condições; por exemplo, Plantas não possuem um coração que pára. Ligação dinâmica é a prática de descobrir qual método invocar no tempo de execução. Por exemplo, se nós escrevermos
void Matar(Mortal m) {
m.Morrer();
}
não fica claro se é uma Pessoa ou Planta, e assim se Planta.Morrer() ou Pessoa.Morrer() deveriam ser invocados no objeto. Com ligação dinâmica, o objeto m é examinado no tempo de execução, e o método correspondente à classe atual é chamado.