Die Ausführung eines Java-Programms erfordert zwei Schritte: Zusammenstellung und Ausführung (Interpretation), und Java ist eine objektorientierte Programmiersprache. Wenn die Unterklasse und die übergeordnete Klasse dieselbe Methode haben, überschreibt die Unterklasse die übergeordnete Klassenmethode. Wenn das Programm die Methode zur Laufzeit aufruft, ob die Methode der übergeordneten Klasse aufgerufen wird oder die Unterklasse außer Kraft gesetzt wird, sollte dies ein Problem sein, auf das wir anfangen, Java zu lernen. Hier bestimmen wir zunächst, welche Methode implementieren oder variable Vorgänge zur Ermittlung dieser Aufrufe implementieren oder variablen, als Binding bezeichnet wird.
Es gibt zwei Bindungsmethoden in Java, eine ist eine statische Bindung, auch als frühe Bindung bezeichnet. Ein anderer Typ ist eine dynamische Bindung, auch als verspätete Bindung bezeichnet.
Das Konzept der Programmbindung:
Die Bindung bezieht sich auf die Assoziation eines Methodenaufrufs mit der Klasse (der Methodenkörper), in der sich die Methode befindet. Für Java wird die Bindung in statische Bindung und dynamische Bindung unterteilt; oder es wird als frühes Bindung und verspätete Bindung bezeichnet.
Statische Bindung (Frühe Bindung Compiler -Bindung):
Die Methode wurde vor der Ausführung des Programms gebunden und vom Compiler oder einem anderen Verbindungsprogramm implementiert. Zum Beispiel: C. Für Java kann es während der Programmkompilierungsperiode als Bindung verstanden werden; Insbesondere sind die einzigen Methoden in Java endgültige, statische, private und Konstrukteure, die vorbinden
Dynamische Bindung (verspätete Bindung während der Laufzeit):
Spätere Bindung: Bindet nach dem Typ des spezifischen Objekts zur Laufzeit.
Wenn eine Sprache eine verspätete Bindung implementiert, muss einige Mechanismen bereitgestellt werden, um den Typ des Objekts während des Betriebs zu bestimmen und geeignete Methoden separat aufzurufen. Mit anderen Worten, der Compiler kennt den Objekttyp zu diesem Zeitpunkt immer noch nicht, aber der Mechanismus zum Aufruf von Methoden kann ihn selbst untersuchen und die richtige Methodenkörper finden. Unterschiedliche Sprachen haben unterschiedliche Möglichkeiten, eine verspätete Bindung zu implementieren. Es kann angenommen werden, dass sie alle bestimmte spezielle Arten von Informationen in das Objekt einfügen müssen.
Dynamischer Bindungsprozess:
Zusammenfassung der Bindung:
Nachdem wir das Konzept der drei verstanden hatten, stellten wir fest, dass Java zur verspäteten Bindung gehört. In Java sind fast alle Methoden verspätete Bindung und dynamisch Bindungsmethoden sind Unterklassen oder Basisklassen zur Laufzeit. Es gibt aber auch besondere Funktionen. Da statische Methoden und endgültige Methoden nicht vererbt werden können, können ihre Werte zur Kompilierungszeit ermittelt werden. Sie gehören zur frühen Bindung. Besonders hervorzuheben sind die von privaten erklärten Methoden und Mitgliedsvariablen nicht durch Unterklassen, und alle privaten Methoden werden implizit als endgültig angegeben (daraus wissen wir, dass die als endgültige Art deklarierte Methode darin besteht, dass die Methode überschrieben und die dynamische Bindung bei JAVA effektiv schließen). Nach der Bindung in Java wird von der JVM implementiert. Wir müssen es nicht explizit deklarieren, aber C ++ ist anders. Wir müssen ausdrücklich erklären, dass eine Methode nach der Bindung ist. Aufwärtstransformation oder Polymorphismus in Java wird durch dynamische Bindung erreicht, sodass das Verständnis der dynamischen Bindung nach oben und Polymorphismus nach oben ist.
Für Methoden in Java, mit Ausnahme der endgültigen, statischen, privaten und konstruktiven Bindung, sind alle anderen Methoden eine dynamische Bindung. Die typische dynamische Bindung erfolgt unter der Konvertierungserklärung der übergeordneten Klasse und der untergeordneten Klasse:
Zum Beispiel: Eltern p = neue Kinder ();
Der spezifische Prozess ist wie folgt:
1. Der Compiler überprüft den Deklarationstyp und den Methodennamen des Objekts. Nehmen wir an, wir nennen die XF (Args) -Methode (args) und X wurde als Objekt der Klasse C deklariert, dann listet der Compiler alle Methoden, die F in Klasse C genannt werden, und Methoden auf, die aus der Superklasse der Klasse C geerbt wurden.
2. Als nächstes prüft der Compiler die im Methodenaufruf angegebenen Parametertypen. Wenn ein Parametertyp unter allen Methoden mit dem Namen F mit dem vom Aufruf am meisten bereitgestellten Parametertyp übereinstimmt, wird diese Methode aufgerufen. Dieser Vorgang wird als "Überlastungsanalyse" bezeichnet
3. Wenn das Programm dynamische Bindung an Aufrufmethoden ausführt und verwendet, muss die virtuelle Maschine eine Methodenversion aufrufen, die dem tatsächlichen Typ des Objekts übereinstimmt, auf das nach x angezeigt wird. Unter der Annahme, dass der tatsächliche Typ D (eine Unterklasse von C) ist, wird die Methode aufgerufen, wenn die Klasse D definiert F (String) ist, ansonsten wird die Methode F (String) in der Superklasse von D usw. durchsucht.
Frage Gedanken:
So stellen Sie einem Methodenbenutzer eine Methode zur Erfüllung einer Aufgabe zur Verfügung. Wenn der Benutzer besondere Anforderungen hat, muss er oder sie seine eigene Methode anpassen?
Wissen beteiligt:
Unterrichtskurs von Kindern, Schnittstelle, Aufwärtstransformation, dynamische Bindung
Spezifischer Code:
Paket com.chengxuyuanzhilu; öffentliche Schnittstelle MyInterfaces {void doting ();} Paket com.chengxuyuanzhilu; public class Drink implementiert myInterfaces {@Override public void doting () {System.out.println ("Ich trinke Wasser"); }} paket com.chengxuyuanzhilu; public class is it implementiert myInterfaces {@Override public void doting () {System.out.println ("Ich esse"); }} paket com.chengxuyuanzhilu; public class run implementiert myInterfaces {@Override public void doting () {System.out.println ("Ich rune"); }} Paket com.chengxuyuanzhilu; public class testDynamicbind {public static void main (String [] args) {myInterfaces my = null; mein = new eat (); binden (mein); mein = neues Getränk (); binden (mein); mein = new run (); binden (mein); } static void bind (myInterfaces my) {my.doting (); }}Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.