Methode Überschreiben von diffrent Rückgabetyp auf void
sagen wir, wir haben diese Methode
public class Animal {
public void eat() { }
}
und auf eine andere Klasse erstreckt Tier hat diese Methode
public String eat(){}
ist dies als Methode überschreiben? weil ich habe gehört, dass Sie können verschiedene Rückgabetypen der Methode überschreiben, sofern Sie die gleiche Methode, die Argumente
- es ist auch nicht möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist weder überladen , noch überschreiben ! Es ist Kompilierungsfehler .
In Java ist es möglich, zu definieren, zwei oder mehr Methoden innerhalb der gleichen Klasse, die denselben Namen haben, solange die parameter-Deklarationen sind unterschiedlich. Wenn dies der Fall ist, die Methoden sind angeblich überlastet werden, und der Prozess wird als bezeichnet die Methode überladen.
Folgenden sind die Regeln der Methode überschreiben in java, die befolgt werden müssen, während übergehen Methode. private, static und final Methode kann nicht überschrieben werden.
1) - Methode-Signatur muss identisch sein, einschließlich Rückgabe-Typ, die Anzahl der Methoden-Parameter, Typ der Parameter und der Reihenfolge der Parameter.
2)Überschreibende Methode kann nicht werfen höher Ausnahme als original oder überschriebene Methode. Diese Regel gilt nur für die checked Exception in Java, überschriebene Methode ist frei, werfen jede ungeprüfte Ausnahme.
3)Überschreibende Methode kann nicht reduzieren die Zugänglichkeit der überschriebenen Methode bedeutet, dass, wenn die ursprüngliche oder überschriebene Methode wird der öffentlichkeit als überschreibende Methode kann nicht geschützt.
Können Sie nur ändern Sie den Rückgabetyp auf eine Unterklasse des ursprünglichen Rückgabetyps.
String
ist Unterklasse vonObject
warum ist das nicht richtig?void
Alle Antworten richtig sind, aus technischer Sicht, weil Leere ist eine Klasse in Java, die keine andere Klasse erweitern kann, und wenn die Methoden, die überschrieben werden der return-Typ muss ein Subtyp des ursprünglichen Typs (parentReturnType.isAsignableFrom(overriddenReturnType)).
Aber aus praktischer Sicht ist die Frage noch gültig ist, und es hätte Sinn gemacht, um eine Ausrede für den speziellen Fall ungültig. Der einzige Wert einer Variablen vom Typ Void kann halt null ist. Weiter keine variable kann die primitive Typ void. Schließlich können Sie nicht kompilieren dieses Codes:
Void Ergebnis = Objekt.notify();
Also am Ende, es hätte Sinn gemacht, um anzugeben, Java anders als bei der 1.5 wurde eingeführt und erlauben überschreiben void-Rückgabe-Typen mit jedem anderen Typ.
Daher die einzige vernünftige Antwort ist es IMHO nicht möglich, da Java wurde so konzipiert, dass dies nicht erlaubt ist.
Dieser nicht korrekten Codes, als zwei Methoden mit dem gleichen Namen zurückgeben sollte gleichen Wert, nur Argumente können differents
Überschreiben ist, dass dieselbe Methode mit denselben Argumenten wie in der Unterklasse
Überlastung mit gleicher Methodenname mit verschiedenen argumens
Den Rückgabetyp einer Methode ist nicht Teil der Methodensignatur.
Beim Aufruf
eat()
auf die Unterklasse, java-schaut auf die Signatur, die Sie zur Verfügung gestellt (eat
ohne Parameter) und beginnt die Suche nach einer Methode mit dieser Signatur, beginnend in der Klasse der Instanz-Typ des Objekts, das Sie es rufen auf (und sucht durch seine Vorfahren, wenn es fehlschlägt, um es zu finden).So, Methoden genannt, die auf eine Unterklasse immer die überschriebenen Methoden (Sie sind in der ersten).
Einer kritischen 'Punkt' von OO (speziell Polymorphismus) ist, dass eine Unterklasse übergeben werden können, wo die Oberklasse erwartet wurde.
Wenn Sie eine Methode aufrufen möchte, die Superklasse'
eat()
Methode und bekommen eine leere, aber Sie ging eine Unterklasse, die in dieser Methode, von deneneat()
zurückgegeben wird eine Zeichenkette; Sie kann sehen, dass die Methode aufrufen, die Unterklasse' Essen und bekommen einen unerwarteten Wert.Sie können sehen, warum dies ein problem sein könnte. :Ich
So, überschreiben von Methoden muss wieder der gleiche Typ oder eine Unterklasse des Typs zurück durch die Eltern.
(Ähnliche Prinzipien gelten, warum Sie zurückkehren können, eine Unterklasse; ich lasse Sie denken, es c: )