Eine Schnittstelle mit verschiedenen Parameter der Methode
Ich wollen, deklarieren Sie ein interface mit mehreren Klassen
diese Klassen-Methode mit anderen Parametern
Schnittstelle:
public interface Operation {
public int Add();
}
Klasse A:
public class CLASSA implement Operation{
public int Add(int id,String name);
}
Klasse B:
public class CLASSB implement Operation{
public int Add(String name);
}
wie impelement dieser Schnittstelle?
Wenn Sie unterschiedliche Parameter haben, dann sind Sie nicht über die gleiche Schnittstelle!
Ich glaube nicht, dass es eine geeignete Antwort für diese Frage, wie das ist, Nein, die richtige Verwendung von Schnittstellen. Aber wenn Ihr die Informationen liefern, warum Sie das tun wollen, kann es ein weiterer Ansatz, um Ihr problem zu lösen.
So wie es da steht, diese nicht beantwortet werden kann in einer angemessenen Art und Weise. Beschreiben Sie bitte warum Sie brauchen, um dies zu tun, d.h. wie Sie zu verwenden beabsichtigen, diese hypothetische Schnittstelle).
Ich glaube nicht, dass es eine geeignete Antwort für diese Frage, wie das ist, Nein, die richtige Verwendung von Schnittstellen. Aber wenn Ihr die Informationen liefern, warum Sie das tun wollen, kann es ein weiterer Ansatz, um Ihr problem zu lösen.
So wie es da steht, diese nicht beantwortet werden kann in einer angemessenen Art und Weise. Beschreiben Sie bitte warum Sie brauchen, um dies zu tun, d.h. wie Sie zu verwenden beabsichtigen, diese hypothetische Schnittstelle).
InformationsquelleAutor user1874800 | 2013-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
könnten Sie einen Operanden-Objekts
oder
jetzt können Sie diese Schnittstelle nutzen und simulieren verschiedene Argumente es gibt keinen anderen Weg, dies zu tun, denn sonst müssten Sie die unterschiedlichen Schnittstellen
Diese Flexibilität gibt, muss aber extra Typprüfung, aber vielleicht ist das ein notwendiger Kompromiss in manchen Situationen so ist es eine sinnvolle Lösung imo. Es bedeutet auch, Sie könnte Unterklasse Operanden und fügen Sie die Logik für diese Unterklasse eine Implementierung der Schnittstelle, so dass jede Art von Argumenten übergeben werden. Beachten Sie jedoch, dass
Operands
Lesen sollteOperand
wenn das wirklich der name der Klasse.ja behoben, danke
InformationsquelleAutor cIph3r
Einige Punkte, die erwähnenswert bezüglich der oben genannten Antworten:
Mein Vorschlag wäre die Umsetzung so etwas wie die Befehl Muster. Entkoppeln Sie den Befehl Implementierung von seinem Implementierungen ist genau seine Absicht.
InformationsquelleAutor Michael Gruner
in diesem Fall verwenden Sie nicht die gleiche Schnittstelle, aber Sie können eine erbliche system, in dem einige Parameter automatisch eingefügt:
InformationsquelleAutor Giudark
Ein besserer Ansatz wäre zu erklären, dass die parameter als ein Feld in der Klasse. Nun übergeben Sie es als parameter an den Konstruktor übergeben, so jetzt ist es angegeben, wenn eine neue Instanz der Klasse erstellt wird.
InformationsquelleAutor Atharva Shukla
Können Sie nicht wie das tun. Wenn die interface-Operationen ist deine (nicht vordefinierte oder jemand anderes), überladen haben abstrakte Methoden. Dies ist der einzige Weg.
InformationsquelleAutor nageswara rao
Besten probieren Sie es aus:
Wenn im Einsatz:
Im Grunde, obwohl Sie hinzufügen können, dass die Methode in der Klasse, wenn es nicht existiert, in die Schnittstelle, dann kann man es nicht nennen, wenn die Instanz, die Sie aufrufen, es ist auf der Schnittstelle.
Dies gilt jedoch, da die Instanz der Klasse
SimpleOperation
, die die überladene Methode deklariert:Dies reduziert die Nützlichkeit eines interfaces jedoch. Wenn Sie daran interessiert sind, auf das überladen der Methoden, erwägen Sie die Verwendung einer abstrakten Oberklasse mit beiden Methoden definiert und diese überschreiben in der Unterklasse. Oder, fügen Sie die ursprünglichen und überladene Methode in der Schnittstelle.
Wie hat dies das Problem lösen?
du hast absolut Recht, nicht bemerkt hatte. OP sollte auch nicht verwenden volle Kappen auf den Namen der Klasse.
InformationsquelleAutor Aram Kocharyan
Dies ist eine schlechte Idee, es verstößt gegen OO-design und die Idee hinter einer Schnittstelle. Ein interface verwendet werden soll, als eine Art und Weise zu abstrahieren, die Methodenaufrufe aus der Umsetzung.
Meine Empfehlung ist, verwenden Sie die Methode mit beide Parameter in der Schnittstelle und einfach nicht mit dem ID-argument in CLASSB oder nicht haben eine add-Methode in das interface und nur unterschiedliche Versionen in jeder Klasse.
InformationsquelleAutor DSJ
Zwei Lösungen
Entweder definieren Sie zwei Methoden in der Schnittstelle:
oder verwenden Sie eine generische Parameter
Aber für Operationen sollte das funktionieren anders.
InformationsquelleAutor AlexWien