Viele Schüler sind dumm und können den Unterschied zwischen Überladung und Überschreibung nicht erkennen. Es wird empfohlen, konzeptionelles Wissen nicht durch Rote zu merken, sondern es zu verstehen und zu merken.
Lassen Sie mich zuerst meine Definition geben:
Überlastung: In derselben Klasse oder in der Vererbungsbeziehung eine Methodengruppe mit demselben Namen und unterschiedlichen Parametern. Im Wesentlichen ist es der Name verschiedener Methoden.
Überschreibung: Zwischen zwei Klassen mit Vererbungsbeziehungen werden die in der Elternklasse existierenden Methoden in der Unterklasse neu definiert. Die Essenz besteht darin, unterschiedliche Implementierungen für dieselbe Methode zu geben.
Schauen wir uns zunächst das Beispiel der Überlastung an:
public class OverloadParent {public String getPerson (String -Name) {return "persona" + name; } public String getPerson (int age) {return "personb"; } public String getPerson (String -Name, int age) {return "personc"; } public void getPerson (String -Name) {System.out.println ("bin ich überlastete Methode?"); }} öffentliche Klasse OverloadChildextends OverloadParent {public void getPerson (Doppelgeld) {System.out.println ("bin ich eine überlastete Methode"); }}Achten Sie auf die Beobachtung:
(1) Es gibt 4 Methoden mit demselben Namen in Überlastungsparent
(2) Die Parametertypen und -zahlen der ersten drei Methoden sind inkonsistent, und der Rückgabewert ist der gleiche, was eine Überladung ausmacht
(3) Methode 4 und Methode 1 Die Rücksendewerte sind nicht unterschiedlich und stellen keine Überlastung dar, und der Compiler passt nicht.
PS: Der Rückgabewert ist das Ergebnis der Methodenausführung. Wenn wir die Methode aufrufen, werden wir nicht angeben, dass ich eine Methode mit dem Rückgabewert des XXX -Typs aufrufen möchte. "
. Es hatte das Gefühl, dass die vorhandene Methode den Bedürfnissen nicht erfüllen konnte, so dass sie einfach eine überlastete.
Überladene Flags: Der Methodenname ist der gleiche, die Parameter sind unterschiedlich (Nummer oder Typ) und haben nichts mit dem Rückgabewert zu tun.
Schauen wir uns ein Beispiel für das Überschreiben an:
public class oversideParent {public void fly () {System.out.println ("ican fly!"); }} public class overdiEchild erweitert OverrideParent {@Override public void fly () {System.out.println ("Ican't Fly, aber ich kann rennen!"); } public static vid main (String [] args) {overwriteParent Child = new Overwritechild (); Child.fly (); }}Was wird bei der Ausführung der Hauptmethode von OverdiEchild ausgegeben?
Die Antwort lautet: Ich kann nicht fliegen, aber ich kann rennen!
Wir sehen:
(1) OverdiEchild und OverrideParent haben eine Fliegenmethode
(2) Der Rückgabewert und der Modifikator der Fliege sind gleich, nur der Methodenkörper ist anders
(3) Es gibt eine Annotation von @Overwrite vor der Fliegenmethode der Unterklasse. JDK1.5 erscheint und wird nur für die Klassenvererbung verwendet. 1.6 kann zur Implementierung der Schnittstellen verwendet werden. Diese Annotation hilft Compiler, es zu überprüfen, und es ist in Ordnung, sie nicht hinzuzufügen.
Überschrieben Flags: Das Kind erbt die übergeordnete Klasse und verfügt über unterschiedliche Implementierungen für dieselbe Methode.
Anwendungsszenarien
Überlast: Wenn die Methodenfunktionen ähnlich sind, müssen jedoch verschiedene Parameter übergeben werden.
Überschreibung: Wenn eine Unterklasse ein eigenes Verhalten hat, erbt sie von der Elternklasse und kann ihre eigenen Bedürfnisse nicht erfüllen.
PS: Überlastung und Überschreibung sind beide Manifestationen des Polymorphismus. Ersteres ist Compiler -Polymorphismus, während letzteres Laufzeit -Polymorphismus ist.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!