Ich kodiere für die Schnittstelle.
Ich habe eine Schnittstelle A und eine Klasse B , die es implementiert.
Mir wurde gesagt, dass ich die Funktionen von B außer Kraft setzen könnte, indem ich sie um C erweitere, aber ich werde weder B noch angesprochen C und ersetzen Sie dann B durch C als Implementierungsklasse von A in den Konfigurationsdateien.
Ich finde, dass ich eine Methode brauche, die in A nicht verfügbar ist. Daher muss ich A eine Methode hinzufügen, die ich in C
Könnte mir jemand helfen, wie es gemacht werden könnte?
Danke.
BEARBEITEN : Beispielcode:
A.java
%Vor%B.java
%Vor% Da ich nun weder A
noch B
anfassen durfte, musste ich eine andere Klasse C
schreiben und sie von B erweitern, um meine Sachen zu machen.
C.java
%Vor% Jetzt brauche ich eine andere Methode void Z()
in C.java , um mein Ding zu machen, aber weil ich die Schnittstelle A
codiere, wenn ich eine Methode nur auf C.java A's
Referenzvariable kann ich Z()
nicht aufrufen, daher muss ich auch void Z()
in A
interface deklarieren, um es so zu benutzen, aber wenn ich das tue, muss ich es tun berühre A
, was mir nicht erlaubt ist. Wie dieses Problem gelöst werden kann, habe ich versucht zu stellen.
Ich kann also im Wesentlichen Folgendes nicht tun:
%Vor%Gibt es irgendeine Möglichkeit für mich, so etwas zu erreichen, ohne A oder B zu berühren?
Ich glaube, ich verstehe was du willst. Sie haben Folgendes:
%Vor% Wenn es das ist, was Sie wollen, dann fürchte ich, dass es nicht getan werden kann. Wer mit A
arbeitet, kennt nur die in A
; Sie werden nicht wissen, dass Sie someNewMethod()
in Ihrer Klasse C
definiert haben. Sie müssen A
ändern können.
Beachten Sie, dass Sie in Extremfällen den Klassentyp der Instanzen von A
überprüfen können:
aber das ist wirklich hässlich und bricht viele der Hauptregeln der OO-Programmierung.
Ihre Frage ist überhaupt nicht klar. Ist das, was du meinst oder was du willst?
%Vor%Wenn die Methode unterstützend ist, müssen Sie sie nicht zu einer Schnittstelle hinzufügen, um sie zu implementieren. Wenn es an anderer Stelle verwendet wird, implementiert B eine andere Schnittstelle D.
Dies könnte Ihr Problem lösen:
%Vor%Gemäß Ihrer Anforderung
1 - Sie haben eine Schnittstelle A erstellt.
2 - Eine Klasse B erstellt, die A implementiert.
3-erstellt eine Klasse C, die B erweitert und A implementiert.
4- A a = new C () erstellt eine Referenzvariable vom Typ A, aber zur Laufzeit wird das Objekt von C gehalten.
Da Sie B und C nicht berühren können, sind die Signaturen gleich und Sie rufen X () und Y () von B auf, wobei Sie das Objekt von C verwenden, während es B erweitert.
Sie haben also B durch C ersetzt, ohne X und Y in C zu implementieren und Änderungen an B vorzunehmen.
Ausgabe:
%Vor%Hoffe, dass dies deine Frage beantwortet.
Tags und Links java inheritance design-patterns interface