2016-06-04 6 views
-1

Ich habe eine Frage über polymorphe Zuordnungen. Lassen Sie uns diese Erklärungen übernehmen:Polymorphismus: Quelle und Ziel nicht kompatibel

CAR car; 
MERCEDES mercedes; 
//MERCEDES inherits from CAR 

car = new MERCEDES(classA); 
mercedes = car 

Ist die letzte Zuordnung möglich? Ich dachte, dass die erste Zuweisung den Typ Auto in MERCEDES ändert und so die letzte Zuordnung wäre richtig. Aber in den Blättern habe ich gezeigt, dass es nicht kompiliert, weil die Quelle der Zuweisung und das Ziel nicht kompatibel sind. Ist das richtig? Und warum ist das so?

+0

'Auto = Neu MERCEDES (...) 'ändert nicht den * Typ * der 'Auto'-Variable; Es ist immer noch 'CAR'. Der Auftrag ist gültig, weil "MERCEDES" ** ein ** 'CAR' ist, aber es ändert nichts an der Tatsache, dass' car' nicht garantiert eine bestimmte 'CAR'-Unterklasse ist. – jonrsharpe

+0

Das bedeutet, dass der statische Typ CAR bleibt, während der dynamische Typ MERCEDES – DevX10

Antwort

0

Ihre Blätter sind richtig, weil eine CAR nicht unbedingt eine MERCEDES ist. Es ist in Ihrem Fall einfach wahr, aber denken Sie an den allgemeinen Fall.

Es könnte viele Arten von Fahrzeugen geben, und der Compiler kann nicht sicherstellen, dass der Zuweisungsausdruck überhaupt wahr ist.

+0

Ah okkey! Aber die erste Aufgabe ändert die Art des Autos in MERCEDES, das ist richtig? – DevX10

+0

@Ergo alle Mercedes sind Autos, aber nicht alle Autos sind Mercedes. – jonrsharpe

+0

Ja, ich habe es bis dahin, es war eher eine allgemeine Frage als die, die ich jetzt gemacht habe. Aber es ist jetzt klar, danke – DevX10

Verwandte Themen