Es gibt zwei Arten von Polymorphismus:
1) Beim Kompilieren des Polymorphismus für mehrere gleichnamige Methoden, wenn Sie feststellen können, welche Methode zur Ausführung desselben Namens während der Kompilierung, wird es beim Kompilieren als Polymorphismus bezeichnet.
2) Wenn der Polymorphismus während der Zusammenstellung nicht bestimmt wird, kann er nur bestimmen, welche der gleichnamigen Methode während der Laufzeit zum Zeitpunkt der Laufzeit als Polymorphismus bezeichnet wird.
Die Methode deckt zwei Arten von Polymorphismus ab.
Xxxx x1 = neu xxxx (Parameterliste);
Xxx xx1 = neu xxx (Parameterliste);
x1.tstring ();
xx1.tstring ();
XXXX ist die übergeordnete Klasse von XXX.
Da das Sub -Object nicht nur ein übergeordnetes Objekt ist, wird dem Objekt über Elternklassen und dem Sub -Class -Objekt die Kompatibilität zugewiesen, und das übergeordnete Klassenobjekt kann als Sub -Class -Objekt zugewiesen werden.
Xxxx x2 = neu xxx (Parameterliste);
X2.ToString ();
Die x2 -Anweisung ist eine Instanz der übergeordneten Klasse, erhält jedoch die SUB -Klasse XXX.
Diese sind in zwei Fälle unterteilt:
Abhängig davon, ob die Unterklasse die übergeordnete Methode abdeckt.
Wenn es keine Abdeckung gibt, wird die übergeordnete Methode ausgeführt.
Beim Kompilieren kann das System gemäß der Klasse des Objekts die Methode, die am Ende ausgeführt werden sollte, nicht bestimmen und kann nur zur Laufzeit ermittelt werden, sodass dies zur Laufzeit Polymorph ist.
Die übergeordnete Klasse führt nicht alle Subklassenmethoden aus und kann nur die unter diesen übergeordnete Klassen/Sub -Klassen behandelte Sub -Class -Methode ausführen.
Implementierung von Java -Polymorphismus
Javas Polymorphismus und C ++ werden durch dynamische Bindung oder Bindung zur Laufzeit realisiert. Wenn Sie eine von einem Objekt verwiesene Methode aufrufen, da der Compiler nicht weiß, ob diese Referenz auf das während der Variablenanweisung erläuterte Typobjekt oder auf das Objekt der Typ -Unterklasse zeigt. Daher kann der Compiler nicht an eine bestimmte Methode für diesen Aufruf gebunden werden. Nur die Typ -Erkennung (RTT) durch Java (RTT) ist zur Laufzeit an die spezifische Methode gebunden
Die Überlastung des Umschreibens und der Überlastung der Methode ist eine andere Manifestation des Java -Polymorphismus. Überschreibung von Kontrolle ist ein Polymorphismus zwischen Eltern und Unterklasse, und die Überlastung von Re -Loading ist eine Polymorphismus -Manifestation einer Klasse.
Geben Sie ein spezifisches Beispiel an:
Klasse People {public String toString () {return "Ich bin ein Volk!"; };} Klasse Girl erweitert Menschen {public String toString () {return "Ich bin ein Mädchen!" []) {pical p = new Girl ();
Führen Sie das Ergebnis aus:
Ich bin ein Mädchen!
P ist ein Hinweis auf Menschen, aber weil es ein Mädchenobjekt am Runt ist
Im Depeten Verständnis des Java -Polymorphismus
Haftungsausschluss, Beispiel für andere Klassenkameraden hier, der ursprüngliche Link: http://blog.csdn.net/thinkhoster/article/details/2307001
Testthema
Klasse A {public String show (d obj) {return "a und d";} public String show (a obj) {return "a sind"; ) {Return "b und a";} Klasse C erweitert B {} Klasse D erweitert B {} public static void main (St Rags []) {a1 = new a (); B b = neuer B (); ); )); c));
Antwort
A und AA und AA und DB und AB und AA und DB und BB und B. und D.
Analyse Ich begann dieses Thema zu machen.
Zunächst müssen wir die Umschreibung und Überlastung zutiefst verstehen.
Zweitens in einem tiefen Verständnis dieses Satzes "Wenn die Objektklasse -Objekte der Super -Klasse Referenz -Referenz -Unterklasse -Objekte verweisen, bestimmt die Art des Referenzobjekts anstelle von Referenzvariablen, deren Mitgliedsmethode, aber diese Aufrufmethode muss in der Superklasse sein. Was welche Klasse ist darin definiert, dh die Methode des Umschreibens durch die Sub -Klasse "" "
Dann analysieren wir diese Fragen
Frage: Glauben Sie, dass B die Show -Methode von übergeordnetem A umgeschrieben hat? Wenn Sie es neu schreiben, wie viele wurden neu geschrieben?
Antwort: Umgeschrieben, neu geschrieben, das heißt, öffentliche String Show (A OBJ), warum wird die öffentliche String -Show (B OBJ)?
Beispielanalyse
Nach dem Lesen der obigen Analyse analysieren wir auch zwei Beispiele:
1. A2.Show (b):
A2 ist eine Referenzvariable, Typ A, B ist eine Instanz von B. Finden Sie die Show (B obj) in einer Klasse A, fand sie jedoch nicht. Also fand ich es in der Superklasse von A, und A hatte keine Superklasse, also wandte ich mich dem A.This ((Super) B), (Super) B als a In a, aber aufgrund eines Objekts der Klasse B, auf das A2 verwiesen wird, hat B von A's Show (A OBJ) -Methode umgeschrieben, sodass sie schließlich an die Show (A OBJ) der Klasse B gesperrt ist, die Ausgabe ist "B und A".
2. A2.Show (c):
A2 ist eine Referenzvariable, Typ A, B ist eine Instanz von B. Finden Sie die Show (C obj) in einer Klasse A, fand sie jedoch nicht. Also fand ich es in der Superkategorie von A und A hatte keine Superklasse, also wandte ich mich an A., ((Super) c, (super) C als B. Werden Sie A2 A2. Das Problem von .show (b) und A2.Show (b) wurde als Ausgabe "B und A" analysiert, so dass hier auch "B und A" ausgegeben wird.