Der Unterschied zwischen statischer und dynamischer Bindung in Java

Mohammad Irfan 12 Oktober 2023
  1. Statische Bindung in Java
  2. Beispiel für statische Bindung in Java
  3. Dynamische Bindung in Java
  4. Beispiel für dynamische Bindung in Java
  5. Statische Bindung und dynamische Bindung in Java
Der Unterschied zwischen statischer und dynamischer Bindung in Java

Dieses Tutorial führt Sie in den Unterschied zwischen statischer Bindung und dynamischer Bindung in Java ein und listet einige Beispielcodes auf, die Sie durch das Thema führen.

Beim Binden wird ein Methodenaufruf mit der Methodenimplementierung verknüpft, und es gibt zwei Typen: statisch und dynamisch. Gemäß dem Polymorphismus kann ein Objekt viele Formen haben, und diese Formen können entweder zur Kompilierzeit oder zur Laufzeit aufgelöst werden.

Statische Bindung tritt auf, wenn der Methodenaufruf zur Kompilierzeit mit der Methodenimplementierung verknüpft ist. Dynamische Bindung tritt auf, wenn die Bindung während der Laufzeit stattfindet. Lassen Sie uns mehr über diese beiden Bindungsarten erfahren und einige Beispiele betrachten.

Statische Bindung in Java

Wie oben besprochen, ist die statische Bindung die Bindung, die während der Kompilierzeit auftritt. Es wird auch als Early Binding bezeichnet, da es während der Kompilierzeit selbst auftritt.

Beim statischen Binding weiß der Compiler genau, welche Implementierung der Methode zu verwenden ist. Es verwendet die Typ- oder Klasseninformationen für die Bindung; Das Überladen von Methoden ist ein Beispiel für statische Bindung.

Beachten Sie, dass alle statischen, finalen und privaten Methoden die statische Bindung verwenden, da untergeordnete Klassen statische, finale und private Methoden nicht überschreiben können. Der Compiler weiß zur Kompilierzeit, welche Methodenimplementierung zu verwenden ist. Da der Compiler weiß, dass die Methoden der Elternklasse nicht überschrieben werden können, verwendet er immer die Elternklassenimplementierung der Methode.

Darüber hinaus ist die statische Bindung auch besser, da weniger Overhead erforderlich ist.

Beispiel für statische Bindung in Java

Im folgenden Code hat die Schulklasse eine statische Methode ringBell() und diese Klasse wird um Classroom erweitert. Das Classroom verfügt auch über eine Methode ringBell().

Da die Methode ringBell() statisch ist, prüft der Compiler nur den Klassentyp und berücksichtigt nicht die zugewiesene Objektklasse. Wenn also eine Klasse School verwendet wird, um ein Objekt von Classroom(School s2 = new Classroom()) zu erstellen, wird die Implementierung der Klasse Schule berücksichtigt und nicht die Klasse Classroom.

class School {
  public static void ringBell() {
    System.out.println("Ringing the school bell...");
  }
}
class Classroom extends School {
  public static void ringBell() {
    System.out.println("Ringing the classroom bell...");
  }
}
public class Main {
  public static void main(String[] args) {
    School s1 = new School(); // Type is School
    s1.ringBell();
    Classroom c1 = new Classroom(); // Type is Classroom
    c1.ringBell();
    School s2 = new Classroom(); // Type is School
    s2.ringBell();
  }
}

Ausgabe:

Ringing the school bell...
Ringing the classroom bell...
Ringing the school bell...

Dynamische Bindung in Java

Dynamic Binding löst die Bindung zur Laufzeit auf, da der Compiler nicht weiß, welche Implementierung zur Kompilierzeit verwendet werden soll.

Es wird auch als Late Binding bezeichnet, da die Bindung zu einem späteren Zeitpunkt zur Laufzeit und nicht zur Kompilierzeit aufgelöst wird. Dynamic Binding verwendet auch das Objekt zum Binden und nicht den Typ oder die Klasse; Das Überschreiben von Methoden ist ein Beispiel für die dynamische Bindung.

Beispiel für dynamische Bindung in Java

Im folgenden Code ist die Methode ringBell() nicht statisch, sodass eine Überschreibung stattfindet. Der Compiler weiß nicht, welche Implementierung der Methode ringBell() verwendet werden soll, daher wird das Binding zur Laufzeit aufgelöst.

Zur Laufzeit wird das Objekt betrachtet und nicht der Typ, mit dem es erstellt wurde. Wenn also eine Klasse School verwendet wird, um ein Objekt von Classroom zu erstellen, dann wird die Implementierung der Klasse Classroom betrachtet und nicht die Klasse Schule.

class School {
  public void ringBell() {
    System.out.println("Ringing the school bell...");
  }
}
class Classroom extends School {
  @Override
  public void ringBell() {
    System.out.println("Ringing the classroom bell...");
  }
}
public class Main {
  public static void main(String[] args) {
    School s1 = new School(); // Type is School and object is of School
    s1.ringBell();
    Classroom c1 = new Classroom(); // Type is Classroom and object is of Classroom
    c1.ringBell();
    School s2 = new Classroom(); // Type is School and object is of Classroom
    s2.ringBell();
  }
}

Ausgabe:

Ringing the school bell...
Ringing the classroom bell...
Ringing the classroom bell...

Statische Bindung und dynamische Bindung in Java

Statische Bindung ist die Verbindung des Methodenaufrufs mit der Methodenimplementierung zur Kompilierzeit. Andererseits ist Dynamic Binding die Verbindung des Methodenaufrufs mit der Methodenimplementierung zur Laufzeit.

Die Kenntnis dieser beiden Techniken ist wichtig, um das Konzept des Polymorphismus zu verstehen. Statische Bindung wird von statischen, finalen und privaten Methoden verwendet. diese Bindung tritt bei überladenen Methoden in Aktion. Dynamische Bindung wird für virtuelle Methoden (standardmäßig virtuell in Java) verwendet und verwendet, um überschriebene Methoden zu binden.

Verwandter Artikel - Java Method