A ligação posterior refere -se à ligação de acordo com o tipo de objeto em tempo de execução, também conhecido como ligação dinâmica ou ligação de tempo de execução. Para implementar a ligação tardia, é necessário que algum mecanismo seja suportado por isso, para que o tipo de objeto possa ser julgado em tempo de execução e a sobrecarga de chamada é maior que a da ligação anterior.
Os métodos estáticos e os métodos finais em Java são ligações iniciais. Outros métodos, exceto métodos estáticos e métodos finais (privados pertencem aos métodos finais) são posteriores e podem determinar o tipo de objeto para ligação durante o tempo de execução. O procedimento de verificação é o seguinte:
A cópia do código é a seguinte:
base de classe
{
// variáveis de membros, as subclasses também têm o mesmo nome de variável de membro
public string test = "campo base";
// Métodos estáticos, as subclasses também têm métodos estáticos com a mesma assinatura
public static void staticmethod ()
{
System.out.println ("base staticmethod ()");
}
// As subclasses substituirão este método
public void não -estático Method ()
{
System.out.println ("base não -estáticoMethod ()");
}
}
Classe pública Derive Base Extende
{
public String test = "Derive Field";
public static void staticmethod ()
{
System.out.println ("derivic staticmethod ()");
}
@Override
public void não -estático Method ()
{
System.out.println ("derivy nãostaticmethod ()");
}
// Saça o valor da variável do membro e verifique se é uma ligação anterior.
public static void testfieldbind (base base)
{
System.out.println (base.test);
}
// Método estático, verifique se é uma ligação anterior.
public static void testStaticMethodBind (base base)
{
// O teste de método estático () da base do tipo deve ser acessado de maneira estática
// É mais razoável usar base.test ().
base.staticmethod ();
}
// Ligue para métodos não estáticos e verifique se eles são encadernas tardias.
public static void testNotStaticMethodBind (base base)
{
base.NotStaticMethod ();
}
public static void main (string [] args)
{
Deriva d = new deriv ();
testfieldbind (d);
testStaticMethodBind (D);
testNotStaticMethodBind (D);
}
}
/*Saída do programa:
Campo base
Base staticmethod ()
Derive notstaticmethod ()
*/