java class A extends Klasse B, und-Methode überschreiben
public class A {
protected ClassX a;
public void foo() {
operations on a;
}
}
public class B extends A {
private ClassY b; //ClassY extends ClassX
@Override
public void foo() {
//wanna the exact same operation as A.foo(), but on b;
}
}
Sorry für so eine nicht klare Titel.
Meine Frage ist: in Klasse B, wenn ich den Aufruf von foo(), und ich möchte den gleichen Vorgang wie die Klasse A auf. Wie kann ich erreichen, und ohne denselben code aus?
Wenn ich Sie weglasse foo() in der Klasse B, würde es funktionieren?
Oder was passiert, wenn ich call super.foo() foo();
Do you mean that my class hierarchy is not well defined?
Alex, ich gelöscht meine Antwort. Ich Las nicht die Frage, klar. Bitte ignorieren Sie.InformationsquelleAutor xiaofan2406 | 2012-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Edel erstreckt ClassX, dann können Sie entfernen
private ClassY b
aus der Klasse B. Dann können Sie nur setzen Sie Ihre Instanz von ClassX auf diea
Instanz-variable. Dies ermöglichtfoo()
geerbt werden, in der Klasse B, aber immer noch die gleiche Logik und Instanz-Variablen.b
.Behoben.
Sie sind unter der Annahme, dass
ClassY
ist einClassX
...Der OP sagte, es war.
wer liest Kommentare! 😛
InformationsquelleAutor Jeremy
Es klingt wie
ClassX
undClassY
hätte eine common-interface (wenn Sie die gleichen Methoden, die Sie aufrufen möchten, auf Erden, zumindest). Haben Sie überlegt, obfoo()
nehmen, in ein Objekt vom Typ des common interface?Sind Sie richtig. Das ist etwas, das ich nicht sehen in der ursprünglichen Frage. So oder so, es steht immer noch, dies wäre eine gültige Lösung.
InformationsquelleAutor nicholas.hauschild
Nicht definieren, die foo () - Methode in B, wenn Sie möchten, dass der gleiche Vorgang wie in A. Wenn Sie möchten, dass eine andere operation als Eine, überschreiben Sie die foo () - Methode in B. Wenn Sie erweitern möchten, die foo () - Methode in B, so dass es zunächst gilt, den Betrieb in A und dann in B, dann rufen Sie super.foo() an der Spitze der Methode, wenn Sie wollen, den Betrieb in Eine zu kommen, nach dem in B ist, dann rufen Sie super.foo() am Ende der Methode foo().
InformationsquelleAutor redcurry
Können Sie tun
super.foo()
in Ihrem overrided Methode.Sicher, wenn Sie anrufen super, es wird zuerst die Methode der Superklasse, in diesem Fall die Klasse Eine Methode foo.
InformationsquelleAutor Tulio F.