Heim  >  Artikel  >  Java  >  Unterschied zwischen früher Bindung und später Bindung in Java

Unterschied zwischen früher Bindung und später Bindung in Java

WBOY
WBOYnach vorne
2023-09-14 08:57:151078Durchsuche

Unterschied zwischen früher Bindung und später Bindung in Java

In der objektorientierten Programmierung eine Methode, die einen Strategieaufruf mit seiner Ausführung verbindet. Java ist eine objektorientierte Programmiersprache, die frühe Autorität und späte Autorität unterstützt, die als inaktive Autorität bzw. aktive Autorität bekannt sind. Beide Bindungsformen haben Vorteile und Anwendungsmöglichkeiten. In diesem Artikel stellen wir die Syntax, Erklärung und Unterschiede zwischen früher Bindung und später Bindung in Java vor.

Grammatik

Die Syntax der frühen Bindung in Java lautet wie folgt.

<ClassName> <objectName> = new <ClassName>();

Die Syntax der späten Bindung in Java lautet wie folgt.

<ClassName> <objectName> = new <DerivedClassName>();

Grammatikerklärung

Der Typ der Klasse wird zur Kompilierungszeit mit früher Bindung bestimmt und die Implementierung der Methode wird basierend auf dem angegebenen Typ des Objekts ausgewählt. Dies bedeutet, dass der Compiler die spezifische Klasse des Objekts kennt und Methodenaufrufe direkt mit Methodenimplementierungen verknüpfen kann.

Die späte Bindung hingegen bestimmt den Klassentyp zur Laufzeit und wählt Methodenimplementierungen basierend auf dem tatsächlichen Typ des Objekts aus. Dies weist darauf hin, dass der Compiler die genaue Klasse des Objekts nicht kennt und sich auf die Laufzeitumgebung verlassen muss, um die richtige Methodenimplementierung zu finden.

Methode 1: Frühes Binden

Bei der frühen Bindung werden Methodenaufrufe zur Kompilierungszeit aufgelöst. Betrachten wir den folgenden frühen Bindungsalgorithmus –

  • Deklarieren Sie eine Klasse namens Shape und verwenden Sie eine Methode namens draw().

  • Erstellen Sie eine Unterklasse namens Circle, um die Shape-Klasse zu erweitern.

  • Implementieren Sie die Methode draw() in der Circle-Klasse.

  • Erstellen Sie mithilfe der frühen Bindung ein Objekt der Circle-Klasse.

  • Rufen Sie die Methode draw() des Objekts auf.

Beispiel

class Shape {
   public void draw() {
      System.out.println("Drawing a shape");
   }
}

class Circle extends Shape {
   @Override
   public void draw() {
      System.out.println("Drawing a circle");
   }
}

public class Main {
   public static void main(String[] args) {
      Shape shape = new Circle();
      shape.draw();
   }
}

Ausgabe

Drawing a circle

Codebeschreibung in Methode 1

Wir haben eine Shape-Klasse mit einer Funktion draw(), die in diesem Code „Form zeichnen“ ausgibt. Wir haben auch eine Circle-Klasse, die die Shape-Klasse erweitert und die Funktion draw() überschreibt, um „Zeichne einen Kreis“ auszugeben. In der Main-Klasse haben wir mithilfe der frühen Bindung ein Objekt der Circle-Klasse erstellt, indem wir es als Shape-Typ deklariert haben. Wenn wir die Funktion draw() eines Formobjekts aufrufen, lautet das Ergebnis „Zeichne einen Kreis“. Dies liegt daran, dass der Methodenaufruf zur Erstellungszeit an die Implementierung der Circle-Klasse gebunden ist.

Methode 2: Späte Bindung

Bei der späten Bindung werden Methodenaufrufe zur Laufzeit aufgelöst. Betrachten wir den folgenden Late-Binding-Algorithmus -

  • Deklarieren Sie eine Klasse namens Animal und verwenden Sie eine Methode namens makeSound().

  • Erstellen Sie zwei Unterklassen mit den Namen „Hund“ und „Katze“, um die Klasse „Tier“ zu erweitern.

  • Implementieren Sie die Methode makeSound() in den Klassen Dog und Cat.

  • Erstellen Sie ein Objekt der Dog-Klasse mit später Bindung.

  • Rufen Sie die makeSound()-Methode des Objekts auf.

Beispiel

class Animal {
   public void makeSound() {
      System.out.println("Animal makes a sound");
   }
}

class Dog extends Animal {
   @Override
   public void makeSound() {
      System.out.println("Dog barks");
   }
}

class Cat extends Animal {
   @Override
   public void makeSound() {
      System.out.println("Cat meows");
   }
}

public class Main {
   public static void main(String[] args) {
      Animal animal = new Dog();
      animal.makeSound();
   }
}

Ausgabe

Dog barks

Codebeschreibung in Methode 2

In diesem Code haben wir eine Animal-Klasse, die über eine makeSound()-Methode verfügt, die „Animal gets a sound“ ausgibt. Wir haben auch zwei Unterklassen, Dog und Cat, die die Animal-Klasse erweitern und die Methode makeSound() überschreiben, um „Hund bellt“ bzw. „Katze miaut“ auszugeben. In der Main-Klasse haben wir mithilfe der späten Bindung ein Objekt der Dog-Klasse erstellt und es als Animal-Typ deklariert. Wenn wir die Methode makeSound() für das Tierobjekt aufrufen, lautet die Ausgabe „Hund bellt“. Dies liegt daran, dass der Methodenaufruf zur Laufzeit basierend auf dem tatsächlichen Typ des Objekts an die Implementierung der Dog-Klasse gebunden ist.

Der Unterschied zwischen früher Bindung und später Bindung in Java

Unterschiede

Frühe Bindung

Late Binding

Analysezeit

Zusammenstellungszeit

Laufzeit

Methodenimplementierung

Bestimmt basierend auf dem deklarierten Typ des Objekts

Bestimmt basierend auf dem tatsächlichen Typ des Objekts

Flexibilität

Eingeschränkte Flexibilität bei der sich dynamisch ändernden Methodenimplementierung

Bietet Flexibilität durch dynamisches Methoden-Dispatching und Polymorphismus

Leistung

Schnelle Leistung, da Methodenaufrufe zur Kompilierungszeit aufgelöst werden

Da Methodenaufrufe zur Laufzeit analysiert werden, ist die Leistung etwas langsamer

Objektdeklaration

Objektdeklaration verwendet Klassentyp

Objektdeklaration verwendet abgeleiteten Klassentyp

Fazit

Frühe Bindung und späte Bindung sind zwei wichtige Konzepte in Java, die bestimmen, wie Methodenaufrufe analysiert werden. Die späte Bindung löst Methodenaufrufe basierend auf dem tatsächlichen Typ des Objekts zur Laufzeit auf, während die frühe Bindung Methodenaufrufe zur Kompilierungszeit mit seiner Implementierung verknüpft. Jede Methode hat ihre eigenen einzigartigen Vorteile und Einsatzmöglichkeiten. Obwohl die frühe Bindung eine bessere Leistung bietet, da Methodenaufrufe zur Kompilierzeit aufgelöst werden, sind keine dynamischen Änderungen an Methodenimplementierungen möglich. Die späte Bindung hingegen ermöglicht die dynamische Methodenverteilung und ermöglicht so Polymorphismus und Flexibilität bei Methodenaufrufen. Um effiziente und flexible Java-Programme zu schreiben, ist es wichtig, den Unterschied zwischen früher Bindung und später Bindung zu verstehen.

Das obige ist der detaillierte Inhalt vonUnterschied zwischen früher Bindung und später Bindung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen