Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Methoden der Unterklasse in Oberklassen-Datentyp anwenden
Wenn ich jetzt zB k.methodeDerUnterKlasse(); anwenden möchte klappt es nicht, da der Typ von der Oberklasse ist.
Wie kann man für diesen einen Methoden-aufruf das Objekt casten?
Aber du kannst nicht mit der Oberklasse auf Methoden der Unterklasse zugreifen, wenn diese fremd fuer die Oberklasse sind, spricht dort nicht vorgesehen sind ...
Code:
O o = new U();
...
U u = (U) o;
u.unterklassenmethode();
ist etwas sinnfrei, funktioniert aber ..., nur woher willst du
wissen, dass zu bestimmten Zeitpunkten in o auch wirklich ein
u steckt...??
Nicht das ich wüsste.
Das Casten geht mit einem: (Oberklasse) Aber es ist wirklich sinnfrei es zur Oberklasse zu casten, nur um auf die O-Funktionen zuzugreifen. Da wäre die Vererbung umsonst.
Also,
1.) Man kann von U nach O casten
2.) Man kann mit instanceof arbeiten
3.) Es macht wirklich keinen Sinn: Entweder ich arbeite mit O (und benutze nur dessen Methoden) oder ich arbeite direkt mit U.
Hier wird für jede Unterklasse das gleiche gemacht. Handelt es sich um eine Instanz von U, dann wird ein anderer Rückgabewert zurückgegeben. So muss ich nicht eine extra Methode schreiben, die U als Parameter hat.
dann schreib die methode in die oberklasse und in StarkesSchiff überschreibst du sie so das sie nen Wert zurückliefert (oder was die methode auch immer machen soll).
Vorteil an der Variante ist einfach: Wenn Du noch mehr "Schiffe" (sprich Unterklassen) bekommst, so musste nicht mit 1000 if-Abfragen arbeiten, sondern die Logik liegt immer da, wo sie hingehört: In dem "Schiff" (der Klasse natürlich) welches den Schaden bekommt...
Auch, wenn's für'n Anfänger ungewöhnlich aussieht (auch wenn ich nicht verstanden habe, was daran ungewohnt ist)
Vorteil an der Variante ist einfach: Wenn Du noch mehr "Schiffe" (sprich Unterklassen) bekommst, so musste nicht mit 1000 if-Abfragen arbeiten, sondern die Logik liegt immer da, wo sie hingehört: In dem "Schiff" (der Klasse natürlich) welches den Schaden bekommt...
Ungewohnt es weil ich es von Flash anders kenne und davon halt auch öfters gebraucht gemacht habe. Den Sinn der Vererbung habe ich schon verstanden.
Aber (vielleicht ist mein Kopf zu sehr Flash orientiert) es gibt zB Situation wo mein Schiff einfach nur schaden bekommt. Ist es zB in einem anderen Level sollen noch zu zusätzlich 10 andere Methoden aufgerufen werden. Das soll nur bestimmte unterklassen gelten. Und das ist bei allen zb 20 Leveln anders. Dann müsste ich ja theoretisch in der unterklassen methode 20 if-abfragen machen:
Code:
if(level == 1)...
if(level == 2)...
etc...
Dann finde ich sieht man den Vorteil (den zB Flash bietet). Aber wie gesagt, ich programmiere ziemlich intensiv mit Flash und deshalb ist das eine andere Kultur, an der ich mich gewöhnen muss. Oder sieht ihr den Vorteil jetzt auch?? :lol:
Wenn ich jetzt zB k.methodeDerUnterKlasse(); anwenden möchte klappt es nicht, da der Typ von der Oberklasse ist.
Wie kann man für diesen einen Methoden-aufruf das Objekt casten?
Die Frage war ja nach einem einmaligen Casting, also nur für diesen einen Methodenaufruf, wobei euer Verfahren wahrscheinlich wohl besser ist. Naja, ich muss noch einiges lernen.