„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie löst Java das Unklarheitsproblem bei der Umschreibung von mehrstöckigen Methoden?

Wie löst Java das Unklarheitsproblem bei der Umschreibung von mehrstöckigen Methoden?

Gepostet am 2025-04-13
Durchsuche:773

How Does Java Resolve Ambiguity When Overriding Methods in Multiple Interfaces?

überschreiben Mehrdeutigkeit mit mehreren Interfaces

im Bereich der objektorientierten Programmierung können Klassen mehrere Schnittstellen implementieren. Wenn diese Schnittstellen jedoch Methoden mit identischen Signaturen besitzen, stellt sich eine Frage: Wie behebt der Compiler die Schnittstellenmethode überschrieben?

In Java haben eine Klasse, die mehrere Schnittstellen mit solchen überlappenden Methoden implementiert, nur eine effektive Implementierung. Der Compiler unterscheidet nicht zwischen den Methoden auf der Grundlage ihres Schnittstellenursprungs.

Um dieses Konzept zu verstehen, betrachten wir das folgende Beispiel:

interface A {
  int f();
}

interface B {
  int f();
}

class Test implements A, B {   
  @Override
  public int f() {  
    return 0;
  }
}   

In diesem Szenario implementiert Test sowohl A als auch B und beide Schnittstellen definieren eine Methode mit dem Namen F () mit derselben Signatur. Durch Überschreiben dieser Methode im Test überschreibt die Klasse die F () -Methode von beiden Schnittstellen effektiv, obwohl nur eine @Override-Annotation vorhanden ist.

Dies liegt daran, dass die Vererbungsregeln von Java diktieren, dass Methoden mit identischen Unterschriften als "Übergeordneter gleichwertig" angesehen werden. Infolgedessen wählt der Compiler die erste übergeordnete Methode aus, die er begegnet, unabhängig von seinem Grenzflächenursprung. In solchen Fällen meldet der Compiler einen Fehler, da es nicht möglich ist, zwei Methoden mit derselben Signatur, aber unterschiedlichen Rückgabetypen in derselben Klasse zu haben.

Um diesen Punkt zu veranschaulichen, ändern wir das Beispiel wie folgt:

Interface Gift { void präsent (); } Schnittstellengast { boolean präsent (); } Klasse präsentierbar implementiert Geschenk, Gast { @Override public void Present () { System.out.println ("Gegenwart als Geschenk!"); } }

interface Gift {
  void present();
}

interface Guest {
  boolean present();
}

class Presentable implements Gift, Guest {
  @Override
  public void present() {
    System.out.println("Present as a gift!");
  }
}

Abschließend implementiert eine Klasse mehrere Schnittstellen mit Überschreibungsmethoden, und der Compiler erkennt, dass es nur eine Methode zum Implementieren gibt, und die @Override-Annotation für die überragenden Methoden für alle Schnittstellen. Inkompatibilitäten zwischen Methodensignaturen führen jedoch zu Kompilierungsfehlern.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3