Ist es möglich, das überschreiben einer Methode in derselben Klasse in Java?
Werfen Sie einen Blick auf das folgende code-Beispiel :
public class Test{
public static void main(String[] args){
System.out.println(new Test());
System.out.println(new Test(){
public String toString(){
return "manual override";
}
});
System.out.println(new Test(){
public String gm(){
return "manual gm";
}
}.gm());
} //end of main method
public String gm(){
return "gm";
}
}
Kann es einige argument, dass die toString()
- Methode überschrieben, in der anonymen inneren Klasse, die ist eine ganz andere Klasse.
Aber das übergeordnete code befindet sich immer noch in der gleichen Klasse. So wird es gerechtfertigt sein, daraus zu folgern, dass in einigen Situationen [wie oben beschrieben] , das überschreiben einer Methode in der gleichen Klasse möglich ist?
Punkt, den Sie hier machen, wird zu einer Art "Überlastung". Überschreiben werden mit verschiedenen Klassen.
Nun, es ist die gleiche Datei, nicht in die gleiche Klasse. Haben Sie einen realen Fall, die Sinn macht für so etwas?
Wenn es Überlastung ist, dann wird das Programm nicht gedruckt haben "manual override". Neben überlastung, Signatur der Methode muss sich ändern - werden bestimmte Parameter geändert werden müssen, um eine überlastung. Aber ich habe mich nicht geändert, die Signatur der Methode der toString-Methode noch ein bisschen. Ich habe aktualisiert die Beispielcode, um Ihnen helfen, besser zu verstehen.
Hier, ich werde mich nicht in jede Diskussion, in der realen Welt Verwendung. Ich weiß, die obigen code-Beispiel ist nicht ein sehr gutes design der Praxis. Aber meine Frage war, falls eine solche situation Eintritt, was soll dann der Abschluss.
Nun, es ist die gleiche Datei, nicht in die gleiche Klasse. Haben Sie einen realen Fall, die Sinn macht für so etwas?
Wenn es Überlastung ist, dann wird das Programm nicht gedruckt haben "manual override". Neben überlastung, Signatur der Methode muss sich ändern - werden bestimmte Parameter geändert werden müssen, um eine überlastung. Aber ich habe mich nicht geändert, die Signatur der Methode der toString-Methode noch ein bisschen. Ich habe aktualisiert die Beispielcode, um Ihnen helfen, besser zu verstehen.
Hier, ich werde mich nicht in jede Diskussion, in der realen Welt Verwendung. Ich weiß, die obigen code-Beispiel ist nicht ein sehr gutes design der Praxis. Aber meine Frage war, falls eine solche situation Eintritt, was soll dann der Abschluss.
InformationsquelleAutor Debadyuti Maiti | 2012-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die Antwort Nein, können Sie nicht überschreiben Sie die gleiche Methode in einer Klasse. Die anonyme innere Klasse ist eine Klasse für sich.
Viele Klassen existiert in der gleichen Klasse Körper (innere Klassen für diese Angelegenheit) und Regeln gilt für Klassen und nicht src-Dateien.
InformationsquelleAutor Premraj
Erstens, haben Sie nicht definiert toString in Ihrem
Test.java
Klasse.Zweitens, wenn Sie eine anonyme Klasse ist konzeptionell, wie das erstellen einer Unterklasse. So überschreiben in der anonymen Klasse ist zulässig, soweit übergeordnete Methode nicht endgültig ist.
Hauptsächlich, überschreiben ist NICHT möglich in der gleichen Klasse sonst.
noch als ich sagte der zweite Punkt, anonyme Klasse ist konzeptionell auf eine dynamisch erstellte Unterklasse. Also, wenn Sie überschrieben haben
gm()
Methode im inneren anonymen Klasse, es ist wie das überschreiben von innerhalb einer Subklasse. So sind Sie nie überschreiben in der gleichen Klasse. Auch wenn Sie versuchen es in der gleichen Klasse, der compiler wird nicht zulassen, dass Sie.InformationsquelleAutor Kshitij
Den obigen code überschreibt toString() Methode der Objekt Klasse. Also man kann nicht sagen, dass es Abweichungen in der gleichen Klasse. Jetzt ist es auch überschreiben einer superclass-Methode und hier die super-Klasse ist Objekt die ist die Superklasse aller Klassen.
InformationsquelleAutor Chandra Sekhar
Nein , Sie können eine Methode überschreiben in der Unterklasse nur.
In Ihrem Fall sind Sie überschreiben
Object's
toString()
Methode nichtTest
- Klasse-Methode.InformationsquelleAutor amicngh
In einer Klasse können wir keine Methode mit der gleichen Signatur.
dies ist, weil es keine Notwendigkeit zu haben, überschreiben Sie die Methode in derselben Klasse.
daher das überschreiben der Methode in derselben Klasse ist nicht möglich, wo, wie, wenn wir wollen, verwenden Sie dieselbe Methode, die Namen können wir überlastung Methode durch ändern der Signatur.
InformationsquelleAutor swapy
Über die "realen Fall", das finde ich eine praktische Verwendung der oben genannten Programm in Abschnitt 2.5 "JUnit Recipes", die 2005 von Manning.
InformationsquelleAutor user2494386
Ist;t diese Funktion überschreiben, die unter gleichen Klasse??
Dies ist nicht eine Antwort auf die Frage: es ist eine Frage selbst.
InformationsquelleAutor AmbiKesh