Hallo zusammen,
ich versuche mich gerade am Casting von Objekten. Grundsätzlich ist mir klar, was damit gemeint ist und auch, wie es funktionieren sollte. Es ergeben sich dabei jedoch zwei Probleme:
1.) Die Definitionen von "UP-CASTING" und "DOWN-CASTING" vermischen sich je nach Quelle mit "implizitem Casting" und "explizitem Casting" sowie "widening cast" und "narrowing cast".
Interessanterweise bezeichnet die Quelle einen UP-Cast als widening cast, die andere als narrowing cast. Man führe diesen Satz mit allen denkbaren Permuationen fort...
Was entspricht denn nun was und was genau ist was???
2.) Natürlich will ich mir jeweils ein Beispiel basteln und testen! Dazu habe ich mir eine Klasse AUTO angelegt. Diese vererbt an die Klassen TAXI und BUS.
- eine Methode der Klasse AUTO heißt FAHREN()
- in der Klasse TAXI habe ich FAHREN() redefiniert, BUS verwendet die geerbte Methode
- in der Klasse TAXI habe ich zudem eine Methode UHR_STARTEN() implementiert (und nur hier)
Nun erzeuge ich jeweils ein Objekt, also: lo_auto, lo_taxi und lo_bus
2.a) Der Cast lo_auto ?= lo_taxi funktioniert. Ich kann anschließend sogar mit Überlisten des Syntaxcheckers die Methode UHR_STARTEN() für lo_auto aufrufen (CALL METHOD lo_auto->('UHR_STARTEN')). Ist dies ein UP- oder DOWN-CAST?
2.b) Der Cast lo_taxi ?= lo_auto führt zu einem Dump mit der Fehlermeldung "Bei der 'CAST' Operation ('?=' oder 'MOVE ?TO') wurde versucht eine Referenz einer Referenzvariablen zuzuweisen.". Warum? Ist dies ein UP- oder ein DOWN-CAST?
Wenn die Fehlermeldung korrekt ist und durch ein Mißverständnis meinerseits hervorgerufen wird: wie gelingt es mir, die Implementierung der Methode FAHREN() aus der Klasse AUTO für das Objekt lo_taxi aufzurufen?
Vielen Dank für euren Input!