ERLEDIGT
NEIN
NEIN
ANTWORTEN
17
17
ZUGRIFFE
844
844
EMPFEHLEN
-
09.12.11 21:24 #16
Ich habe das mit dem Werfen noch nich gemacht, aber kann dir ja mal meine Ideen verraten.
1. Man nimmt die Methode werfen() mit in AbstrakterMario auf und implementiert sie sogar aus, da SuperMario und FlugMario die Panzer ja werfen können. Bei PinguinMario wird die Methode dann überlagert, allerdings mit einem leeren Methodenkörper, sprich sie macht nix. Aber da ist das Problem, das du bereits erkannt hast. Ich habe die Aufgabe auch so verstanden, dass PinguinMario die Methode gar nicht kennen darf, das wäre aber bei diesem Ansatz der Fall.
2. Man bastelt sich ein Interface Werfen oder so, das die Methode werfen() deklariert. Das Interface wird von SuperMario und FlugMario implementiert und somit auch die Methode werfen(). Auf das Interface kann man eigentlich auch verzichten, aber so hat man es einheitlich und könnte dann sogar über das Interface agieren ohne zu wissen, welcher Mario-Typ da eigentlich verwendet wird.
3. Ist eigentlich wie 2, aber anstatt eines Interfaces wird jetzt eine weitere abstrakte Klasse WerfenderMario deklariert, welche die Methode werfen() deklariert und sogar implementiert. Die Klasse wird von AbstrakterMario abgeleitet und SuperMario und FlugMario wiederum leiten von WerfenderMario ab. Die Klasse WerfenderMario ist deswegen abstrakt, weil sie nicht zur Instanziirung gedacht ist, sondern nur eine Schnittstellenfunktion erfüllen soll und somit die ableitenden Klassen nur um weitere Funktionalitäten erweitert.
Die sauberen Lösungsansätze sind 2. und 3., da 1. eher gepfuscht ist und laut Aufgabenstellung meiner Meinung nach die Aufgabe auch nicht erfüllt ist. Durch die Ansätze 2. und 3. ist gegeben, dass PinguinMario die Methode werfen() nicht kennt, die anderen beiden Marios aber schon (wie es nach meinem Verständnis in der Aufgabe gefordert ist). Im Ansatz 2. verändert sich an der ursprünglichen Umsetzung (also ohne Ansatz 1.) eigentlich soweit nichts, es kommt nur ein Interface hinzu. Beim Ansatz 3. wird die Vererbungshierarchie etwas abgeändert, indem WerfenderMario mitten in die Hierarchie eingehangen wird. In der Aufgabe stand nichts davon, dass sowas verboten sei, müsste also erlaubt sein und wäre sogar die beste Umsetzung. Allerdings stört mich an der Variante etwas, ich weiß gerade nur nicht was ...Geändert von Akeshihiro (09.12.11 um 21:39 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
ich werd wenn ich die lösung bekomme diese heir mal posten, dann kanns du dir angucken wie er sich das vorgestellt hat. an ein interface hab ich auch schon gedacht, aber letzte mal war mein interface auch nur "unnötig" und "nicht gefordert" ...
Edit:
Ich habe mich deiner dritten lösung mal angenommen:
aus AMario hab ich die private int panzer und die methode schmeißen rausgenommen, die sammeln method etwas modifiziert:
das hier ein else if ist ist gewwollt. der gegenstand könnte ja auch panzer sein. das wird heir aber noch nicht geprüft, dazu später mehr.Code :1 2 3 4 5 6 7 8 9 10 11 12 13
public void sammeln(AGegenstand gegenstand) { if(gegenstand.getClass()==RoterPilz.class) { this.größe=true; System.out.println(this.getClass().getName() + " wächst"); } else if(gegenstand.getClass()==GrünerPilz.class) { this.leben++; System.out.println(this.getClass().getName() + " erhält ein Leben"); } }
dann habe ich die abstrakte klassse ASchmeißenderMario, wenn ich das mit dem super richtig verstanden hab wird meine sammeln methode hier in der art erweitert?:
hier wird dann auch auf panzer geprüftCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
public abstract class ASchmeißenderMario extends AMario{ private int panzer; public void schmeißen() { System.out.println(this.getClass().getName() + " wirft einen Panzer"); this.panzer--; } public void sammeln(AGegenstand gegenstand) { super.sammeln(gegenstand); if(gegenstand.getClass()==Panzer.class) { if(this.panzer<3) { System.out.println(this.getClass().getName() + " sammelt einen Panzer"); this.panzer++; } else { System.out.println(this.getClass().getName() + " hat schon 3 Panzer"); } } }
Das sollte soweit meiner Meinung nach alles ok sein.
Jetzt leitet sich ja die abstrakte klasse ASchmeißenderMario von AMario ab, die kenns du ja insoweit schon.
Da ich mit dem super so noch keinen kontakt hatte habe ich jetzt ein kleines problem :
Du hast mir ja sowas hier gezeigt:
Code :1 2 3 4 5 6 7
public class Mario extends ASchmeißenderMario{ public Mario(boolean größe, int leben) { super(größe,leben); }
jetzt ist Mario ja aber in der ableitungsherachie weiter unten, ASchemißenderMario hat keine instanzvariablen außer dem panzer, daher könnte ich dort diesen konstruktor ja nicht vordefinieren, weshalb ich auch auf AMario weiter zugreifen muss.
Aber wie? Ich dachte jetzt an sowas wie super.super(größe,leben) oder super (super(größe,leben)) aber das ist wohl nicht die richtige syntax, falls sowas in der art möglich ist ..
Edit 2:
Ok, musste in ASchmeißenderMario auch noch
einfügen .... hat sich also erledigtCode :1 2 3 4 5 6
public ASchmeißenderMario(){}; public ASchmeißenderMario(boolean größe, int leben) { super(größe,leben); }
Könntest mir nur gerne noch bestätigen das das mit dem sammeln in AWerfenderMario mit dem super so richtig ist, also ich denke, das die methode mit gleichem parameter halt erst auf roter pilz oder grüner pilz prüft, wie in der superklasse halt die sammelmethode ist, und danach noch was zusätzliches ausgeführt wird, halt das prüfen auf einen panzer, was aber halt durch die vererbungsherachie nur in Mario/Flugmario getan wird.
Hm ... Wenn ich mir meine eigenen texte hier so durchlese kann ich ziemlich schlecht im bezug auf programmierung erklären was ich meine xdGeändert von I2oxxi (12.12.11 um 10:36 Uhr)
-
12.12.11 16:41 #18
Doch doch, das ist richtig so
Zuerst wird die Original-Methode ausgeführt und dann dein dazugebastelter Teil.
Sorry, aber ich kann grad nicht so wirklich viel erklären oder helfen, hab mir meine linke Hand verbrüht und das tut höllisch weh, daher ist das jetzt auch nur so kurz.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
Ähnliche Themen
-
ArrayList<ArrayList<String>> ausgeben?
Von fartos im Forum JavaAntworten: 3Letzter Beitrag: 18.10.11, 19:22 -
ArrayList problem
Von ImurNMY im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 3Letzter Beitrag: 19.08.09, 07:56 -
ArrayList Problem
Von hbrauchl im Forum JavaAntworten: 3Letzter Beitrag: 03.08.07, 11:19 -
ArrayList in einer ArrayList
Von xXchrissiXx im Forum JavaAntworten: 8Letzter Beitrag: 10.04.07, 10:14 -
Inhalt einer ArrayList in andere ArrayList kopieren
Von Pierre im Forum .NET ArchivAntworten: 2Letzter Beitrag: 05.07.05, 16:58





Zitieren
Login





