Gewusst wie: erweitern einer Schnittstelle

Ich bin Codierung Schnittstelle.

Habe ich eine Schnittstelle Eine und eine Klasse B implementiert.

Mir wurde gesagt, dass könnte ich überschreiben B Funktionalitäten durch Verlängerung C aber ich bin gefragt, zu berühren, weder B noch C, und dann später ersetzen B mit C die Umsetzung Klasse von Eine in den Konfigurationsdateien.

Ich vermute, dass ich eine Methode erforderlich, die es nicht in Eine, also brauche ich eine Methode zum hinzufügen Eine, dass ich umsetzen konnte in C. Aber ich bin nicht erlaubt zu berühren Eine.

Könnte mir jemand helfen, wie-könnte-es-getan werden?

Dank.

BEARBEITEN:
Beispiel-code:

A.java

public interface A {
    void X();
    void Y();
}

B.java

public class B implements A {
    public void X() {//something interesting}
    public void Y() {//something not very interesting}
}

Nun, weil ich nicht durfte touch entweder A oder B ich hatte zu schreiben, eine andere Klasse C und erweitern von B zu tun meine Sachen.

C.java

public class C extends B {
    public void Y() {//overriding B's not very interesting Y and making it interesting}
}

Jetzt brauche ich eine andere Methode void Z() im C.java zu tun mein Ding aber da bin ich die Codierung Schnittstelle A wenn ich eine Methode nur auf C.java während der Verwendung A's Referenz-variable, die ich nicht in der Lage zu nennen Z() so werde ich zu erklären void Z() im A - Schnittstelle als auch, es zu benutzen, aber wenn ich das Tue, werde ich zu berühren A was darf ich nicht. So, wie man dieses Problem behoben ist, was ich versucht habe zu Fragen.

Also im wesentlichen, ich werde nicht in der Lage, etwas zu tun, wie die folgenden:

A a = new C();
a.Z(); //can't do this

So ist es eine Möglichkeit für mich, etwas zu erreichen, ohne berühren von A oder B?

  • haben Sie vielleicht bedeuten: Note weder A noch B
  • plus: warum kann man nicht eine Methode, die nicht in der Schnittstelle? Dies ist nicht Objective-C!
  • ja, ich weiß, dass ist möglich in ObjC zu, aber es ist häufiger vorhanden.
  • Sie können nicht berühren Sie A, B, oder C und muss ersetzt werden B-mit C-Implementierung Einer? Dies ist unmöglich, es sei denn, Sie können entweder ändern C oder erweitern C zu D und ersetzen B mit Ihrem neuen Umsetzung D. Sie können nicht fügen Sie eine neue Methode außerhalb der Schnittstelle Ein und erwarten, dass es durch die Standard-Konsumenten von Einer s-Schnittstelle.
  • OK, aber was meinst du eigentlich?
  • "Ich Schätze, dass ich noch eine Methode, die nicht verfügbar in Einem, so muss ich fügen Sie eine Methode Ein, die ich umsetzen konnte in C." - was hast du hier gemeint? Sie haben zuerst gesagt, Sie müssen eine Methode, die nicht in A. Dann Sie sagen, Sie brauchen, um hinzuzufügen, dass die Methode Ein!!
  • Sie schreiben die Klasse C Recht? dann was ist das problem?
  • vielleicht brauchen Sie entweder B oder C als abstrakte Klassen? dann müssen Sie nicht implementieren alle Methoden in abstrakten Klassen. Ist es das, was Sie wollen?
  • Ja, gute Frage. Wenn C alle Methoden von A, kann er verwendet werden
  • Tut mir Leid für die verspätete Antwort. Ich habe bearbeitet die Frage, für die es mehr klar. Ich bin mit Java.
  • Ja, ich konnte es nicht berühren entweder A oder B, so musste ich eine Klasse schreiben C und erweitern von B zu überschreiben von Methoden implementiert, die in B aber dann dachte ich, ich brauchte eine neue Methode, und da bin ich die Codierung Schnittstelle brauche ich, um diese Methode in A so gut wie ich bin mit A's Referenz-variable zu nennen, die Methoden und die A's Referenz-variable wird nicht unbedingt eine neu hinzugefügte Methode nur zu C.
  • Ah, denke, Sie sind auf einige Gründe, über mich! @skip
  • Wenn Sie Bearbeiten die Frage, bitte ändern Sie den ganzen text und lassen eine Frage, die Sinn macht, auf seine eigene. Hinzufügen von Bearbeitungen, die Sie auf das Ende nicht sehr hilfreich für die Leser.
  • Ich habe eine endgültige Bearbeitung mit einem Beispiel, in einem Versuch zu erklären, das Problem versuche zu lösen, im Falle seiner möglich das zu machen, Danke.

InformationsquelleAutor skip | 2012-09-08
Schreibe einen Kommentar