In Java ist der Polymorphismus in zwei Arten unterteilt: Kompilierungszeitpolymorphismus (Überlastung) und Laufzeitpolymorphismus (Überschreiber). Die Kompilierungszeitpolymorphismus wird auch als Vorbindung bezeichnet, und das Laufzeitpolymorphismus wird auch nach der Bindung bezeichnet.
Hier ist ein Beispiel:
öffentliche Klasse OverloadandOverwrite {public static void main (String [] args) {a1 = new a (); A A2 = neu B (); B b = neu B (); C c = neu c (); D d = neu d (); System.out.print ("A1.print (a1):"); a1.print (a1); // output a und a system.out.print ("a1.print (b):"); A1.print (b); // Ausgabe A und A: Der Grund dafür ist, dass es in A keine Methode gibt, so dass die Methode mit Parameter A aufgerufen wird, weil b das System ist. A1.Print (c); // Ausgabe A und A: Der Grund dafür ist, dass es in A keine Methode gibt, so dass die Methode mit Parameter A aufgerufen wird, da C von B von B und B von einem System geerbt wird. A1.print (d); // Ausgabe A und D: Der Grund dafür ist, dass die Methode mit Parameter D eine Methode mit Parameter D gibt. A2.Print (b); // Ausgabe B und A: Der Grund dafür ist, dass der Eintrag A ist. Zuerst prüfen Sie, ob es eine Druckmethode mit Parameter B in A gibt. Wenn Sie feststellen, dass es keine Methode gibt, suchen Sie nach einer Methode mit Parameter A. Da B von A. Ich fand, dass eine solche Methode existiert. Überprüfen Sie dann erneut, ob diese Methode in B. umgeschrieben wurde. Es wird festgestellt, dass es eine Umschreiben -Methode gibt. Rufen Sie direkt das Rewrite -Methode system.out.print ("a2.print (c) an:"); A2.Print (c); // Ausgabe B und A: Der Grund dafür ist, dass der Eintrag A ist. Zuerst prüfen Sie, ob es eine Druckmethode mit Parameter C in A gibt. Wenn nein nein ist, suchen Sie dann, ob es eine Methode mit Parameter B. gibt, da C von b von B vererbt wird und es keine solche Methode gibt. Suchen Sie dann nach einer Druckmethode mit dem Parameter A. Da B von B erbt. Wenn Sie eine Methode direkt überprüft. System.out.print ("a2.print (d):"); A2.Print (d); // Ausgabe A und D: Der Grund dafür ist, dass der Eintrag A ist. Wenn in A eine Methode mit Parameter D vorhanden ist, überprüfen Sie, dass diese Methode in B. nicht umgeschrieben wurde. Daher ist das Ergebnis dieser Methode in A ausgegeben. System.out.print ("A2.Print (A2):"); A2.Print (A2); // Ausgabe B und A; Der Grund dafür ist, dass die Art von A2 a ist, so dass die Druckmethode mit Parameter A in A aufgerufen wird, aber die neue rechts von A2 ist b, also weil es eine Methode mit Parameter a in B gibt, wird diese Methode in B übernommen. B. print (b); // Ausgabe B und B; Grund: Der Eintrag ist b. Überprüfen Sie also, ob die Druckfunktion mit Parameter B in B vorhanden ist und ob eine direkte Ausgabe vorliegt. System.out.print ("B.Print (c):"); B.Print (c); // Ausgabe B und B; Grund: Der Eintrag ist b. Wenn Sie also sehen, ob die Druckfunktion mit Parameter C in B vorhanden ist, wenn Sie feststellen, dass es nicht vorhanden ist, sehen Sie, ob die Druckfunktion mit Parameter B vorhanden ist. Wenn Sie feststellen, dass es existiert und die Methode in C nicht umgeschrieben wird, geben Sie sie direkt aus. Eine Sache zu beachten ist, dass Sie auch prüfen müssen, ob die Druckmethode mit Parameter C in a vorhanden ist, da B von A erbt. Wenn es welche vorhanden ist, verwenden Sie diese Methode mit dem Ergebnis. Auf diese Weise wird das Ausgabeergebnis zu einem und C -System. B. print (d); // Ausgabe a und d; Grund: Der Eintrag ist B. Es gibt jedoch keine Druckfunktion mit Parameter D in B, B erbt von A. Es gibt eine Druckfunktion mit Parameter D in a, sodass der Ausgang das Ergebnis des Parameters D in a ist; }} Klasse A {public void print (a) {System.out.println ("a und a"); } public void print (d d) {System.out.println ("a und d"); } // public void print (c c) // {// system.out.println ("a und c"); //}} Klasse B erweitert einen {public void print (b b) {System.out.println ("B und B"); } public void print (a) {System.out.println ("b und a"); }} Klasse C erweitert B {} Klasse D erweitert C {}Was hier erklärt werden muss, ist:
Für a2 = neu B ();
Wenn A2 separat gedruckt wird, ist das Druckergebnis B@(Hash -Code) anstelle eines@(Hash -Code). Dies bedeutet jedoch nicht, dass der Typ A2 vom Typ B ist, weil wir A2.Print (A2) anrufen. Im obigen Programm ist das Ausgabeergebnis B und A anstelle von A und A (wenn A2 als B angenommen wird, sollte die Druckmethode mit Parameter B in Klasse A aufgerufen werden, da es keine solche Methode gibt, dann die zweite Wahl, eine Methode mit Parameter A zu rufen, sollte A und A ausgeben, da B eine Unterklasse von a ist.
Das obige ist eine Beispielcode -Analyse von Umschreiben und Überladung. Ich hoffe, es wird für Schüler, die Java studieren, hilfreich sein.