tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
844
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    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 ;)

  2. #17
    I2oxxi I2oxxi ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    20
    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:
    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");
            }
        }
    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.


    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?:
    Code :
    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");
     
                }
            }
     
        }
    hier wird dann auch auf panzer geprüft

    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
    Code :
    1
    2
    3
    4
    5
    6
    
    public ASchmeißenderMario(){};
        
        public ASchmeißenderMario(boolean größe, int leben)
        {
            super(größe,leben);
        }
    einfügen .... hat sich also erledigt

    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 xd
    Geändert von I2oxxi (12.12.11 um 10:36 Uhr)
     

  3. #18
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    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

  1. ArrayList<ArrayList<String>> ausgeben?
    Von fartos im Forum Java
    Antworten: 3
    Letzter Beitrag: 18.10.11, 19:22
  2. ArrayList problem
    Von ImurNMY im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 3
    Letzter Beitrag: 19.08.09, 07:56
  3. ArrayList Problem
    Von hbrauchl im Forum Java
    Antworten: 3
    Letzter Beitrag: 03.08.07, 11:19
  4. ArrayList in einer ArrayList
    Von xXchrissiXx im Forum Java
    Antworten: 8
    Letzter Beitrag: 10.04.07, 10:14
  5. Inhalt einer ArrayList in andere ArrayList kopieren
    Von Pierre im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 05.07.05, 16:58