8 Stimmen

Rufen Sie denselben Methodennamen aus zwei verschiedenen Schnittstellen auf - Java

Java erlaubt nicht die Mehrfachvererbung zum Schutz vor dem Diamantenproblem. Es verwendet Schnittstellen, um dieses Problem zu lösen.

Dann der Fall der Verwendung von Schnittstellen, sagen wir

interface A{
run();
}

interface B{
run();
}

class C implements A, B{
run() {}   //Welche Schnittstelle verwenden wir?
}

Wenn wir die Methode run() in der Klasse C aufrufen, wie können wir bestimmen, welche Schnittstelle wir verwenden?

0voto

JB Nizet Punkte 654813

Deine Frage ergibt nicht viel Sinn. Lass uns ein realistisches Beispiel betrachten. Ein Mensch kann weinen. Ein Tierbaby kann weinen. Jetzt hast du eine Instanz John, die sowohl ein Mensch als auch ein Tierbaby ist, und du lässt es weinen. Was passiert? John weint. Die Tatsache, dass es die weine()-Methoden beider Schnittstellen implementiert, ändert nicht, was weinen für John bedeutet und bewirkt.

0voto

ZhongYu Punkte 18778

Beide. C hat zwei Methoden von zwei Schnittstellen geerbt (die zufällig übereinstimmend sind (8.4.8.4)). C hat dann eine Methode, die beide überschreibt, weil die Signatur beiden entspricht. (8.4.2)

Allerdings könnte man sich fragen - nur weil zwei Methoden denselben Namen und Parameter-Typen haben, bedeutet nicht zwangsläufig, dass sie die gleiche Bedeutung haben. Der Name könnte sehr wohl ein englisches Wort sein, das zwei verschiedene Dinge bedeutet. Was ist, wenn wir zwei Methoden von zwei übergeordneten Schnittstellen geerbt haben, die gleich aussehen, aber tatsächlich unterschiedliche Semantiken haben, daher sollte es zwei Implementierungen in der Unterklasse geben? Zum Beispiel

interface java.lang.Runnable
    void run()

interface com.animal.Runnable
    void run()

class Dog implements com.animal.Runnable,
                     java.lang.Runnable // ein Hund als Aufgabe
    ???

Man kann sich eine Sprache vorstellen, die solche Fälle handhaben kann. Aber Java macht das nicht. Wenn zwei Methoden ähnlich genug sind, wird angenommen, dass sie die gleiche Semantik haben. Glücklicherweise scheint dies in der Praxis sowieso kein Problem zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X