Die spätere Bindung bezieht sich auf die Bindung gemäß dem Typ des Objekts zur Laufzeit, auch als dynamische Bindung oder Laufzeitbindung bezeichnet. Um eine verspätete Bindung zu implementieren, muss ein gewisser Mechanismus von diesem gestützt werden, damit die Art des Objekts zur Laufzeit beurteilt werden kann und der Anrufaufwand größer ist als der der vorherigen Bindung.
Die statischen und endgültigen Methoden in Java sind frühe Bindungen. Andere Methoden außer statischen Methoden und endgültigen Methoden (privat gehört zu den endgültigen Methoden) sind später Bindung und können den Typ des Objekts zur Bindung während der Laufzeit bestimmen. Das Überprüfungsverfahren ist wie folgt:
Die Codekopie lautet wie folgt:
Klassenbasis
{
// Mitgliedsvariablen, Unterklassen haben auch denselben Mitgliedsvariablennamen
public String test = "Basisfeld";
// Statische Methoden haben auch Unterklassen statische Methoden mit derselben Signatur
öffentliche statische Leere staticMethod ()
{
System.out.println ("Base staticMethod ()");
}
// Unterklassen überschreiben diese Methode
öffentliche Leere NotstaticMethod ()
{
System.out.println ("Base notStaticMethod ()");
}
}
Öffentliche Klasse Ableitungen erweitert die Basis
{
public String test = "Field abgeben";
öffentliche statische Leere staticMethod ()
{
System.out.println ("staticMethod ()");
}
@Override
öffentliche Leere NotstaticMethod ()
{
System.out.println ("abgeleiten notStaticMethod ()");
}
// Ausgabe des Wertes der Elementvariablen und überprüfen Sie, ob es sich um eine vorherige Bindung handelt.
Öffentliche statische Leerraum testfieldbind (Basisbasis)
{
System.out.println (Base.test);
}
// statische Methode vergewissern Sie sich, dass es sich um eine frühere Bindung handelt.
Öffentliche statische Leerraum teststaticMethodbind (Basisbasis)
{
// Auf die statische Methode test () von der Typbasis sollte auf statische Weise zugegriffen werden
// Es ist vernünftiger, Base zu verwenden.
Base.staticMethod ();
}
// Rufen Sie nicht statische Methoden an und vergewissern Sie sich, dass es sich um verspätete Bindungen handelt.
Öffentliche statische Leerraum testnotstaticMethodbind (Basisbasis)
{
Base.notstaticMethod ();
}
öffentliche statische Leere Main (String [] Args)
{
Abgeben d = new desive ();
testfieldbind (d);
teststaticMethodbind (d);
testNotStaticMethodbind (d);
}
}
/*Programmausgabe:
Basisfeld
Basis staticMethod ()
NotstaticMethod () abgeben
*/