Zwei Schnittstelle mit demselben Methodennamen - Implementierung von Methoden

8

Angenommen, ich habe zwei Schnittstellen:

%Vor%

und

%Vor%

Eine konkrete Klasse implementiert beide Schnittstellen:

%Vor%

Meine Fragen sind:

  1. Reicht die einzelne Implementierung von method() für beide Schnittstellen IOne und ITwo aus?
  2. Wenn die Antwort von 1 ja lautet, gibt es eine Möglichkeit, beide Methoden in einer einzigen Klasse zu erhalten? In diesem Fall müssen wir nicht beide Schnittstellen in einer Klasse implementieren.
Razib 28.07.2015, 12:45
quelle

4 Antworten

2

Für 1 lautet die Antwort yes . Es genügt, eine Implementierung für die Methode in der Klasse bereitzustellen, damit beide Schnittstellen automatisch implementiert werden können.

Wenn Sie für beide Methoden beide Methoden verwenden müssen, sollte Ihre Klasse nicht beide Schnittstellen implementieren. Es gibt jedoch einen Trick, den Sie verwenden können:

%Vor%

Testcode:

%Vor%

Die Klasse A muss nicht beide Schnittstellen implementieren. In diesem Fall implementieren Sie einfach nicht method() für A und behalten nur die anonymen inneren Klassen.

    
Federico Peralta Schaffner 28.07.2015, 14:46
quelle
4

Wenn beide Methoden die gleiche Signatur haben, wie in Ihrem Beispiel, ist nur eine Implementierung möglich . In diesem Fall gibt es keine Möglichkeit, zwei Versionen der Methode für die zwei Schnittstellen zu implementieren. Also, das Beispiel wird ausreichen.

Wenn die Signatur für beide Methoden gleich ist, aber unterschiedliche Rückgabetypen aufweist, führt dies zu einem Kompilierungsfehler.

Wenn die beiden Methoden unterschiedliche Signaturen haben, kann und muss es zwei verschiedene Implementierungen geben.

    
Timo 28.07.2015 12:49
quelle
2
  

Reicht die einzelne Implementierung von method () für die Schnittstelle IOne und ITwo aus?

Ja. Die Implementierung ist für beide Methoden abstract identisch.

  

Wenn die Antwort von 1 ja ist, gibt es eine Möglichkeit, beide Methoden in einer einzigen Klasse zu finden?

Nein.

    
Konstantin Yovkov 28.07.2015 12:49
quelle
2
  1. Ja. Diese Methode wird aufgerufen, wenn auf die Klasse als Instanz von IOne oder ITwo zugegriffen wird.

  2. Nein. Der Name, der Rückgabetyp und die Argumente einer Methode definieren die Signatur einer Methode, und zwei Methoden innerhalb derselben Klasse können nicht dieselbe Signatur aufweisen. Dies führt zu einem Fehler bei der Kompilierung.

    Eine Lösung, die ich vorschlage, ist die Verwendung verschiedener Methodennamen für IOne.method und ITwo.method, wodurch die Signatur jeder Methode einzigartig wird. Dadurch können Sie zwei eindeutige Methoden in einer einzelnen Klasse definieren.

William Morrison 28.07.2015 12:49
quelle