„Dynamisch“ bedeutet „Laufzeit“ und „Bindung“ bedeutet „Assoziation“. Der Begriff „dynamische Bindung“ bezeichnet also die Laufzeitzuordnung von Objekten durch eine virtuelle Java-Maschine. Hier werden wir sehen, wie Java eine dynamische Bindung zur Laufzeit erreicht, also vor der endgültigen Ausführung des Codes, aber nach der Kompilierung.
Syntax: Für die dynamische Bindung in Java sollten Sie der grundlegenden Java-Syntax mit Anmerkungen folgen. Sie können hier die Annotation @Override verwenden, um anzugeben, welche Methode wir konkret überschreiben möchten.
WERBUNG Beliebter Kurs in dieser Kategorie JAVA MASTERY - Spezialisierung | 78 Kursreihe | 15 ProbetestsLaufzeitpolymorphismus funktioniert in Java durch Methodenüberschreibung. Das Überschreiben von Methoden erfolgt, wenn Objekte denselben Methodennamen, dieselben Argumente und denselben Typ wie ihre übergeordnete Klasse haben, jedoch eine andere Funktionalität aufweisen. Wenn eine untergeordnete Klasse diese Art von Methode enthält, nennen wir sie eine überschriebene Methode.
Der Grund für die Benennung liegt darin, dass die Funktionalität der Methode dynamisch zur Laufzeit gemäß dem Objekt durch die JVM entschieden wird. Es wird auch als „Laufzeitpolymorphismus“ bezeichnet. Wenn wir eine überschriebene Methode einer untergeordneten Klasse über ihre übergeordnete Typreferenz aufrufen (dieses Phänomen wird in Java als „Upcasting“ bezeichnet), dann gibt der Typ des Objekts an, welche Methode oder Funktionalität aufgerufen wird. Diese Entscheidung wird während der Laufzeit von der JVM nach der Kompilierung des Codes getroffen. Daher wird es Laufzeitpolymorphismus genannt. Es wird auch „späte Bindung“ genannt, da die Bindung von Methode und Objekt, d. h. die Funktionalität der Methode des Objekts, die angezeigt wird, spät, d. h. nach der Kompilierung, entschieden wird.
Regeln zur dynamischen Bindung
Einschränkungen bei der dynamischen Bindung
Wir werden hier einige Codebeispiele für dynamische Bindung besprechen:
In diesem Beispiel zeigen wir, wie die Methode „locate()“ unterschiedliche Meldungen anzeigt, je nachdem, mit welchem Objekttyp sie verknüpft ist. Wenn es mit dem Typ „Kontinent“ verknüpft ist, werden Nachrichten von einer übergeordneten Klasse angezeigt. Wenn es mit dem Typ „SubContinent“ verknüpft ist, werden Nachrichten der untergeordneten Klasse angezeigt.
Code:
class Continent { public void locate () { System.out.println("We are in Continent"); } } class SubContinent extends Continent { @Override public void locate () { System.out.println("We are in SubContinent"); } } public class DynamicBinding { public static void main(String args[]) { Continent superObject = new Continent (); superObject.locate(); //method of super class or parent class is called SubContinent subObject = new SubContinent (); // upcasting subObject.locate();//method of sub class or child class is called by Parent reference, this is called "Dynamic Binding" SubContinent subObject2 = new SubContinent (); subObject2.locate(); //method of sub class or child class is called } }
Ausgabe:
Nehmen wir ein Beispiel der dynamischen Bindung bei mehrstufiger Vererbung. In diesem Beispiel werden zwei Vererbungsebenen berücksichtigt. In diesem Beispiel zeigen wir, wie die Methode identify() unterschiedliche Meldungen anzeigt, je nachdem, mit welchem Objekttyp sie verknüpft ist. Wenn es mit dem Typ „Computer“ verknüpft ist, werden Nachrichten von einer übergeordneten Klasse angezeigt. Wenn es mit dem Typ „Desktop“ verknüpft ist, zeigt es Nachrichten von seiner untergeordneten Klasse an. Auch in der zweiten Vererbungsebene zeigt es bei Zuordnung zum Typ „Laptop“ Nachrichten von seiner untergeordneten Klasse seiner übergeordneten Klasse, der „Desktop“-Klasse.
Code:
class Computer { void identify() { System.out.println("This is Computer"); } } class Desktop extends Computer { void identify (){ System.out.println("This is Desktop"); } } class Laptop extends Desktop { void identify (){ System.out.println("This is Laptop"); } } public class DynamicBinding { public static void main(String args[]){ Computer superObject=new Computer (); Computer subObject=new Desktop (); // // upcasting : first level of heritance Computer babyObject=new Laptop (); // // upcasting : second level of heritance superObject.identify (); subObject.identify (); //run time polymorphism happening in first level of heritance babyObject.identify (); //run time polymorphism happening in second level of heritance } }
Ausgabe:
Nehmen wir ein weiteres Beispiel für Laufzeitpolymorphismus im Fall der mehrstufigen Vererbung. In diesem Beispiel werden drei Vererbungsebenen berücksichtigt. In diesem Beispiel zeigen wir, wie die Methode feature() unterschiedliche Features anzeigt, je nachdem, mit welchem Objekttyp sie verknüpft ist. Wenn es mit dem Typ „Kosmetik“ verknüpft ist, werden Nachrichten von einer übergeordneten Klasse angezeigt. Wenn es mit dem Typ „Parfüm“ verknüpft ist, zeigt es Nachrichten von seiner untergeordneten Klasse an. Auch in der zweiten Vererbungsebene zeigt es bei Zuordnung zum Typ „Deo“ Nachrichten von seiner untergeordneten Klasse seiner übergeordneten Klasse, der „Perfume“-Klasse. Auch in der dritten Vererbungsebene zeigt es bei Verknüpfung mit dem Typ „DeoStick“ Nachrichten von seiner untergeordneten Klasse seiner übergeordneten Klasse, der „Deo“-Klasse.
Code:
class Cosmetics{ void feature() { System.out.println("Cosmetics are expensive"); } } class Perfume extends Cosmetics { void feature(){ System.out.println("Perfume is soothing"); } } class Deo extends Cosmetics { void feature(){ System.out.println("Deo is sometimes better than perfume"); } } class DeoStick extends Deo{ void feature(){ System.out.println("DeoStick is very handy"); } } public class RunTimePolymorphism { public static void main(String args[]){ Cosmetics superObject=new Cosmetics (); Cosmetics subObject=new Perfume(); // child object type : first level of heritance Cosmetics sub2Object=new Deo(); // child object type : second level of heritance Cosmetics sub3Object=new DeoStick(); // child object type : third level of heritance superObject.feature(); subObject.feature(); //run time polymorphism happening in first level of heritance sub2Object.feature(); //run time polymorphism happening in second level of heritance sub3Object.feature(); //run time polymorphism happening in third level of heritance } }
Ausgabe:
Damit sind wir mit dem Thema „Dynamische Bindung in Java“ fertig. Schreiben Sie sich die in den obigen Beispielen genannten Codes in den Java-Compiler und überprüfen Sie die Ausgabe. Das Erlernen von Codes wird unvollständig sein, wenn Sie nicht selbst Code schreiben.
Das obige ist der detaillierte Inhalt vonDynamische Bindung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!