La vinculación posterior se refiere a la unión de acuerdo con el tipo de objeto en tiempo de ejecución, también conocido como enlace dinámico o enlace de tiempo de ejecución. Para implementar la unión tardía, se requiere que se respalde algún mecanismo para que el tipo de objeto pueda juzgarse en tiempo de ejecución, y la sobrecarga de llamadas es mayor que la de la unión anterior.
Los métodos estáticos y los métodos finales en JAVA son los primeros enlaces. Otros métodos, excepto los métodos estáticos y los métodos finales (privado, pertenece a los métodos finales) posteriores se unen más tarde, y pueden determinar el tipo de objeto para la unión durante el tiempo de ejecución. El procedimiento de verificación es el siguiente:
La copia del código es la siguiente:
base de clases
{
// variables de miembros, las subclases también tienen el mismo nombre de variable de miembro
Public String test = "campo base";
// Métodos estáticos, las subclases también tienen métodos estáticos con la misma firma
Público void estático staticmethod ()
{
System.out.println ("base staticMethod ()");
}
// Las subclases anularán este método
Public Void NotstaticMethod ()
{
System.out.println ("Base NotStaticMethod ()");
}
}
La clase pública Derive extiende la base
{
Public String test = "Derive Field";
Público void estático staticmethod ()
{
System.out.println ("Derive staticMethod ()");
}
@Anular
Public Void NotstaticMethod ()
{
System.out.println ("Derive NotStaticMethod ()");
}
// emite el valor de la variable miembro y verifique que sea un enlace previo.
Public static void testfieldbind (base base)
{
System.out.println (base.test);
}
// Método estático, verifique que sea un enlace previo.
Public estático vacío TestStaticMethodbind (base base)
{
// La prueba del método estático () desde la base de tipo se debe acceder de manera estática
// es más razonable usar base.test ().
base.staticMethod ();
}
// llame a métodos no estáticos y verifique que son enlaces tardíos.
Public estático vacío testNotstaticMethodbind (base base)
{
base.notstaticMethod ();
}
Public static void main (String [] args)
{
Derivar d = nuevo derive ();
testFieldbind (d);
teststaticMethodbind (d);
testNotstaticMethodbind (d);
}
}
/*Salida del programa:
Campo base
Base staticmethod ()
Derive NotstaticMethod ()
*/