# Polymorphie Aufgaben



## programm2008 (1. Mrz 2015)

Hallo Leute,

ich versuche zurzeit diese Aufgabe zu lösen (Siehe Anhang) allerdings komme ich an einer Stelle nicht weiter

Also erstmal erklär ich wie ich das mache. Nehmen wir dazu die dritte Aufgabe:


```
ff.gg(ff);
```

Ich geh da so vor, dass ich mir erstmal ff angucke. Da wurde ein Mitte in ein Oben abgespeichert. Ok das heisst für mich guck in die Mitte methode rein wo die Methode auch ausgeführt werden soll. 

dann methoden name gg ist ja identisch dass brauch ich net beachten.

als letztes den Parameter angucken (ff) dabei beachte ich nun nicht die rechte Seite der Deklaration, sondern die Linke also Oben ist hier wichtig. 

Also gehe ich zusammenfassend in Mitte rein und führe die Methode mit dem "Oben" aus. Die Ausgabe lautet also "L". So weit so gut


Beim nächsten Befehl funktioniert das allerdings nicht 


```
ff.gg(uu);
```


Also gehe ich wie gerade vor ich guck mir die Deklaration von ff an aber die rechte Seite. 

Ein Mitte Objekt wurde in ein Oben Objekt abgespeichert. Das Mitte ist wichtig, dort wird also die Methode ausgeführt.

Und Parameter wie gesagt die linke Seite beachten wobei hier beide Unten Objekte sind.


Zusammenfassend in der Mitte Klasse den Unten Parameter ausführen. Also "M".

Allerdings kommt da nicht *M *raus *sondern B* ich versteh das einfach nicht. Wieso geht der in die Klasse Oben und führt dort den Mitte Parameter aus???


----------



## Lodoss (2. Mrz 2015)

oo.gg(uu)

auf dem Objekt vom typ "Oben" wird die methode gg aufgerufen und ein Objekt vom Typ "Unten" übergeben.
Da unten von Mitte abgeleitet ist (im Prinzip ist ein "Oben" objekt ein spezielles "Mitte" Objekt), wird die Methode "Oben.gg(Mitte m)" ausgeführt.

Wenn die Klasse Oben noch eine weitere Funktion "Oben.gg(Unten u)" hätte, würde diese ausgeführt werden.


----------



## programm2008 (2. Mrz 2015)

Danke erstmal für die Antwort. Aber oo.gg(uu) versteh ich ja das ist kein Problem, ich verstehe ff.gg(uu) leider nicht


----------



## Flown (2. Mrz 2015)

Statischer Typ von ff ist Oben, dadurch kennt ff die Spezialisierung gg(Unten u) nicht, trotz ff vom dynamischen Typ Mitte ist. Darum wird die Methode gg(Mitte m) verwendet.


----------



## programm2008 (2. Mrz 2015)

Flown hat gesagt.:


> Statischer Typ von ff ist Oben, dadurch kennt ff die Spezialisierung gg(Unten u) nicht, trotz ff vom dynamischen Typ Mitte ist. Darum wird die Methode gg(Mitte m) verwendet.



Aber ff.gg(ff); hat auch als Statischen Typ Oben trotzdem wird die Methode im dynamischen Typ Mitte ausgeführt?


----------



## Flown (2. Mrz 2015)

Ja ist klar, aber hier schläg dynamic dispatching zu!


----------



## programm2008 (2. Mrz 2015)

Und wann schlägt dynamic dispatching immer zu?


----------



## Flown (2. Mrz 2015)

Link und Beispiel angucken!

Abgeleitete Methoden des dynamischen Typs werden aufgerufen trotz des statischen Typs. Das ist die Stärke der Vererbung.


----------

