Kann eine Methode in der Unterklasse überladen eine Methode in der super-Klasse?
Java-code:
class P {
public void hello() {}
}
class C extends P {
public void hello(String s) {}
}
Meine Frage ist: Ist die hello
in der Klasse C
überlastung der einen mit dem gleichen Namen in der super-Klasse P
?
Mein Freund sagt, Sie sind nicht, weil die sind nicht in der selben Klasse.
- Sind Sie Fragen, überladen oder überschreiben?
- Dein Freund ist falsch
- Gleiche Frage, gleiche Antwort hier: stackoverflow.com/questions/15291400/...
- Unter der Annahme von "überladen" Sie eigentlich "zwingend", dass dein Freund Recht hat. Es gibt keine übergeordnete. Obwohl es "überladen". Klasse
C
hat sowohlhello()
undhello(String s)
Methoden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen einen eher formalen Ansatz, der Java Language Specification für Java-7-Staaten:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9
Ich würde zeigen Sie Ihrem Freund auf diesen link.
Also, kurz gesagt, in deinem Beispiel die hello-Methode ist in der Tat überlastet.
Einfache Erklärung:
Ich denke, diese Frage stellt sich, weil in Zeiten hören wir die folgende,
"Die Methode überladen erfolgt innerhalb der Klasse.
Zwingende Methode erfolgt in zwei Klassen, Vererbung Beziehung."
Die obige Aussage ist korrekt. Aber dein Freund ist falsch. warum?
Weil beim erweitern einer Klasse, die Unterklasse alle Methoden definiert, die von Superklasse. Es ist, als ob alle Methoden der Oberklasse implementiert wurden von der Unterklasse. Das bedeutet, dass die hello () - Methode wurde implementiert von der Klasse C als gut. Nun, Sie Hinzugefügt eine Methode in der Klasse C mit verschiedenen parameter (hello(String s)). Das bedeutet, das C-Klasse hat zwei Methoden mit demselben Namen, aber unterschiedlichen Parametern-und das ist "überlastung".
Hoffe, es ist kristallklar.
Ja, dein Freund ist falsch, denn er denkt nur an das Konzept des überwiegenden.
Aber hier
hello()
, undhello(String s)
Verschieden sind, indem es Parameter, so ist es eine überlastung nicht zu überschreiben.Yes it is overloading
Diese überlastung geschieht im Falle der KlasseC
' die VerlängerungP
und daher mittwo methods with the same nam
e aberdifferent parameters
führt zu überlastung der Methodehello()
imClass C
. AllerdingsClass P
ist nur in der Lage, den Zugriff auf eine der Methoden, die in Ihrer eigenen definition.Lange Geschichte kurz, eine Instanz von
C
sowohl derhello()
und diehello(String s)
Methoden zur Verfügung. Eine Instanz vonP
haben nur diehello
Methode zur Verfügung.Dies ist in der Tat überlastung, als Sie zwei Methoden mit dem gleichen Namen unter verschiedenen Parametern.
Allerdings ist es nicht überschreiben, weil das überschreiben wird eine deklarierte Methode in einer Subklasse mit demselben Namen und gleichen Parametern als eine Methode in einer Superklasse.
E. g. wenn Sie hatte
wäre es überschreiben die
hello()
deklarierte Methode inP
. Beim aufrufennew C().hello()
in diesem Fall würden Sie berufen sich auf die Umsetzung derhello()
deklarierte Methode in der KlasseC
.Überlastung passieren kann, in der gleichen Klasse sowie Eltern-Kind-class-Beziehungen in der Erwägung, dass das überschreiben geschieht nur in einer erbschaft, Beziehung.
Es ist eine berechtigte Frage, da in der Regel bei überlastung erklärt wird mithilfe von zwei Methoden mit dem gleichen Namen (aber unterschiedlichen Parametern) in der gleichen Klasse.
Ich würde argumentieren, dass ja die Methode
hello
imC
ist überladenP
'shello
Methode, da "ist ein" Beziehung.Die "ist ein" - Beziehung fest, dass seit der C-Unterklassen von P, es ist auch eine Instanz von P ("C ist ein P"). Also C hat 2 überlastet
hello
-Methoden.Gute Frage!!!In der sub-Klasse, wenn der name der Methode | parameter Typ | Liste geändert wird, dann sub-class-Methode wird nicht als overriding-es ist, als Methode überladen
Beispiel :
In oben genannten Programm m1-Methode ist eine überladene Methode.
Ja, wir können die überlastung der super-Klasse-Methode in der sub-Klasse, wie da unten:
Quelle der Verwirrung: Dein Freund der richtige wäre, wenn das sprechen über C++, nicht Java. In C++ ist das überladen von Funktionen kann nur auftreten, zwischen den Mitgliedern der gleichen Klasse. In der Erwägung, dass in Java eine überlastung kann auftreten, zusätzlich über zwei Klassen mit Vererbung Beziehung.
Überlastung ist, wenn Sie zwei Methoden, die den gleichen Namen, aber unterschiedliche Signaturen (Ihr Fall).
Anmerkung: Überschreiben ist, wenn Sie zwei Methoden, die genau die gleiche Signatur und den Namen der übergeordneten Klasse.