Methoden Zustand innerhalb einer Instanz ändern

Kel

Aktives Mitglied
Ich habe eine Aufgabe über Vererbung, bei der ich zum einen eine Superklasse 'Mario' definieren soll, von der dann 2 Subklassen erben (SuperMario, PinguinMario)
Teils unterschiedliche Funktionen bzw. Funktion für eine Subklasse nicht erlaubt - Methode überschreiben in der Subklasse hilft.
Das passt soweit auch.

Jetzt muss ich eine weitere Subklasse hinzufügen:
Sie wollen Ihr bestehendes Programm nun um FlugMario erweitern. Allerdings kann FlugMario nicht
– wie die bisherigen Formen – normal springen, sondern stattdessen eine kurze Zeit fliegen. Führen
Sie dazu eine abstrakte Klasse AbstrakterMario ein, von der alle drei konkreten Mario Klassen erben.
Überlegen Sie sich genau, welche Variablen und Methoden Sie in AbstrakterMario schreiben, und
welche Methoden davon abstrakt sein sollten.
Wie löse ich das am besten mit dem Konstruktor? Beim erzeugen einer FlugMario-Instanz muss ja die Flugzeit mitgegeben werden, ich dachte an einen extra Konstruktor in der Superklasse.

Java:
	public AbstrakterMario(boolean gross, int anzahlLeben) {
		this.gross = gross;
		this.anzahlLeben = anzahlLeben;
	}
	
	public AbstrakterMario(boolean gross, int anzahlLeben, int flugDauer) {
	this.gross = gross;
	this.anzahlLeben = anzahlLeben;
	this.flugDauer = flugDauer;
	}
Ist die Idee soweit gut, dass in der Superklasse zu machen, oder sollte ich das mit dem Konstruktor für FlugMario lieber in der Subklasse FlugMario machen?




Zweites Problem:
Zusätzlich soll Mario folgende Gegenstände einsammeln können. Fügen Sie den entsprechenden Code in die „Gegenstände sammeln“-Funktion Ihres Mario ein.
Als Parameter übergeben Sie einen AbstraktenGegenstand, die zu implementierenden Unterklassen sind die folgenden. Zusätzlich ändern Sie hier den Zustand innerhalb der jeweiligen Marioinstanz:
„roter Pilz“ : Der rote Pilz macht Mario groß.
„grüner Pilz“ : Mario bekommt ein Leben.
„Panzer“ : Mario kann bis zu 3 Panzer sammeln, die er schmeißen kann.
Hier bin ich mir unsicher, was genau gemeint ist und wie ich das lösen soll.

Eine neue Superklasse 'AbstrakterGegenstand' und 3 Subklassen (RoterPilz, GruenerPilz, Panzer) sind soweit klar. Die neue Superklasse kann ich ja auch 'abstrakt' machen, da es ja keinen Sinn macht, davon ein Objekt zu erzeugen.
Nur wie übergebe ich 'AbstrakterGegenstand' als Parameter? Dass wäre dann ja sowas wie
Java:
public void sammelGegenstand(AbstrakterGegenstand item) {

	}
Das sieht aber ehrlich gesagt nicht so wirklich sinnvoll oder logisch aus. Und wie änder ich den Zustand der Marioinstanzen, wenn z.B. SuperMario einen roten Pilz sammelt. Müsste ja eigentlich mit set-Methode machbar sein, aber wie greife ich auf die set-Methode der SuperMario-Instanz zu?
Und ist die Überlegung auch richtig oder hab ich da einen Denkfehler?

Und dann noch zu den Subklassen GruenerPilz, RoterPilz, Panzer - wie mach ich das? Mir fehlt da irgendwie der komplette Ansatz.
Überlegung meinerseits war, dass ich in bei der sammelGegenstand()-Methode ja ein Item übergeben muss, das Item hat ja dazu noch Auswirkungen auf meine Marioinstanz.
Zusätzlich verstehe ich die Aufgabenstellung so, dass ich die Änderung der Marioinstanz in der Subklasse der Items machen soll. Bloss wie? :eek:

Wäre nett wenn jemand Tipps für mich hat, Vererbung ist wohl doch nicht so leicht wie ich dachte :rtfm:.
 

Crian

Top Contributor
Ich vermute, dass Mario dann eine Liste der eingesammelten Gegenstände braucht. Bei den Gegenständen kann nur die Information vermerkt werden, die diese Gegenstände betreffen. In einer anderen Klasse dürften sie nichts ändern.

Mario kann einfach abfragen, ob der Gegenstand in der Liste abstrakter Gegenstände ein roter Pilz ist, und wenn ja führt er die und die Auswirkungen durch.

Das ist nur etwas unglücklich, weil dann die Informationen über die Wirkungen der Gegenstände nicht in diesen Klassen stecken, sondern in Mario. Mmmh.


Edit: Alternativ kann Mario jeden Gegenstand nach allen Eigenschaften abfragen. Diese Abfragen können in der Abstrakten Klasse drinstehen und immer 0 zurückgeben, der einzelne Gegenstand überschreibt dann nur die ihn betreffende Methode (etwa erhoeheLeben()). So muss man dann auch, wenn weitere Eigenschaften dazu kommen, nur die Basisklasse ändern, und nicht alle Gegenstände.

Also etwa so, nur mal für zwei Pilze:

Java:
abstract class AbtrakterGegenstand {
    public int erhoeheLeben() {
        return 0;
    }

    public int erhoeheGroesse() {
        return 0;
    }
}

Java:
class RoterPilz extends AbtrakterGegenstand {
    public int erhoeheGroesse() {
        return 5;
    }
}

Java:
class GruenerPilz extends AbtrakterGegenstand {
    public int erhoeheLeben() {
        return 10;
    }
}

Vielleicht kann man das noch eleganter machen und die Werte in Variablen vorhalten. Aber so in der Art ginge das.

Und Mario ruft dann für jeden Gegenstand einfach alle Funktionen auf.
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
vielleicht sowas:
Java:
public interface IMario {
   void collect(IItem gegenstand);
   void morph(IMorph morphStrategy);
}

interface IItem {
   void interact(IMario mario);
}

interface IMorph {
   boolean increase();
   boolean shot();
   boolean bulletproof();
}

class Mario implements IMario {

   @Override
   public void collect (IItem gegenstand) {
      gegenstand.interact (this);
   }

   @Override
   public void morph (IMorph morphStrategy)
   {
      if (morphStrategy.increase ()) {
         // lass mario wachsen
      }
      if (morphStrategy.bulletproof ()) {
         // lsd flacker modus
      }
      //..
   }
}

class SuperFlower implements IItem {

   private IMorph morphStrategy;
   
   @Override
   public void interact (IMario mario) {
      mario.morph (morphStrategy);
   }
   
class Star implements IItem {

   private IMorph morphStrategy;
   
   @Override
   public void interact (IMario mario) {
      mario.morph (morphStrategy);
   }
}
}

EDIT:
oder gleich direkt:
Java:
public interface IMario {
   void collect(IItem gegenstand);
}

interface IItem {
   void interact(IMario mario);
}

class Mario implements IMario {

   @Override
   public void collect (IItem gegenstand)
   {
      gegenstand.interact (this);
   }
}

class SuperFlower implements IItem {

   @Override
   public void interact (IMario mario) {
      // lass ihn schiessen
   }
   
class Star implements IItem {

   @Override
   public void interact (IMario mario) {
      // lass inh flackerrn
   }
}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Interface Combobox Zustand speichern Java Basics - Anfänger-Themen 1
J Ein Objekt a hat den selben Zustand wie Objekt b / Ist vom Typ C.... Java Basics - Anfänger-Themen 3
Mikescher Classpath Library wird nicht geladen - nur im exportierten Zustand Java Basics - Anfänger-Themen 4
C Klassen Von zwei Klassen auf den selben Zustand zugreifen... Java Basics - Anfänger-Themen 6
C Programm stoppen - Zustand speichern - später fortführen Java Basics - Anfänger-Themen 7
S Thread interner Zustand Java Basics - Anfänger-Themen 2
W Zustand von Threads Java Basics - Anfänger-Themen 4
H Innerer Zustand eines Objekts? Java Basics - Anfänger-Themen 13
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
Z Erste Schritte Indexe innerhalb eines Arrays zusammensählen Java Basics - Anfänger-Themen 14
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
B Enum innerhalb einer Klasse / anderes Konzept Java Basics - Anfänger-Themen 8
dapzoo Innerhalb eines Jahres intensivem Java-Selbststudium zur Anstellung? Java Basics - Anfänger-Themen 37
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
T split innerhalb Klammern ignorieren? Java Basics - Anfänger-Themen 6
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Innerhalb von Zeichenketten tauschen Java Basics - Anfänger-Themen 1
S BufferedWriter innerhalb einer Methode Java Basics - Anfänger-Themen 2
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
H For-Schleife innerhalb If-Abfrage? Java Basics - Anfänger-Themen 3
A Werte innerhalb von resultset vergleichen Java Basics - Anfänger-Themen 2
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
MiMa abbruch innerhalb einer Rekursiven Schleife Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
O Vererbung this innerhalb von super Java Basics - Anfänger-Themen 7
Silvascus Erste Schritte Werte innerhalb eines Arrays addieren Java Basics - Anfänger-Themen 3
L Punkt innerhalb eines Bereiches verschieben Java Basics - Anfänger-Themen 9
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
I Innerhalb einer Methode suchen und hinzufügen. Neues Objekt in Suche dann? Java Basics - Anfänger-Themen 8
S Classpath: Alle .jars innerhalb eines Ordners einbinden Java Basics - Anfänger-Themen 4
M Farben/Color Abfragen von Farben innerhalb einer Methode Java Basics - Anfänger-Themen 9
T Erste Schritte run innerhalb eines package Java Basics - Anfänger-Themen 1
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
B Variablen global abspeicher innerhalb von Methoden Java Basics - Anfänger-Themen 7
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
M Throws Anweisung innerhalb eines Methodenkopfes unklar Java Basics - Anfänger-Themen 4
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
M Text innerhalb Anführungsstriche als "eins" auswerten Java Basics - Anfänger-Themen 5
O Files eines Directories innerhalb eines JAR-Files auflisten Java Basics - Anfänger-Themen 0
S Funktionen/Atrribute nur innerhalb einer package Zugänglich machen Java Basics - Anfänger-Themen 8
I JTextfield[] innerhalb eines Itemlistener aufrufen Java Basics - Anfänger-Themen 2
B Zufallsdatum innerhalb eines bestimmten Bereiches erzeugen Java Basics - Anfänger-Themen 3
D OOP Identifzierung eines Objektes innerhalb eines Array Java Basics - Anfänger-Themen 3
G Bewegung innerhalb eines Koordinatensystems berechnen Java Basics - Anfänger-Themen 9
P Kapselung Variable innerhalb einer inneren Klasse ansprechen ohne ein Objekt erzeugen zu müssen? Java Basics - Anfänger-Themen 6
L Next()-Aufruf zweimal innerhalb einer While-Schleife bei ListIterator Java Basics - Anfänger-Themen 10
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
B for-schleife innerhalb neuer Methode Java Basics - Anfänger-Themen 5
N Innerhalb des Programmes RAM einstellen Java Basics - Anfänger-Themen 2
J Variablen überschreiben innerhalb einer Klasse Java Basics - Anfänger-Themen 7
N Zugriff auf Werte in Arrays innerhalb ArrayList Java Basics - Anfänger-Themen 2
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
H Innerhalb eines Package wird eine Klassenmethode nicht gefunden. Java Basics - Anfänger-Themen 2
Kaniee Zugriffe innerhalb eines Arrays Java Basics - Anfänger-Themen 9
A objekt innerhalb der gleiche klasse Java Basics - Anfänger-Themen 10
J Dateien innerhalb einer JAR verwenden Java Basics - Anfänger-Themen 3
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
P Unterschied JRE innerhalb/ außerhalb des JDK Verzeichnisses? Java Basics - Anfänger-Themen 5
S Input/Output Problem mit dateizugriff innerhalb der .jar (Applet) Java Basics - Anfänger-Themen 2
K Zufällige Auswahl innerhalb eines Arrays und Arrays aus JLabel füllen Java Basics - Anfänger-Themen 32
K Bild mit Maus innerhalb eines Rahmens bewegen Java Basics - Anfänger-Themen 5
E Zeile innerhalb Datei überschreiben Java Basics - Anfänger-Themen 2
M Java-Prog soll Texte innerhalb Bildern erkennen Java Basics - Anfänger-Themen 2
S Variablen Variable innerhalb eines if-Statements? Java Basics - Anfänger-Themen 10
N OOP Zugriff auf eine Objekt innerhalb einer Klasse aus statischen Methoden Java Basics - Anfänger-Themen 9
S Innerhalb eines Fensters ein neues erschaffen Java Basics - Anfänger-Themen 7
E Elemente innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 7
M Main methode innerhalb von Java aufrufen Java Basics - Anfänger-Themen 11
A lokale Variable innerhalb "actionPerformed()" Java Basics - Anfänger-Themen 10
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
M FileWriter innerhalb runnable Jar Java Basics - Anfänger-Themen 8
J Diverse Frag zu Vererbung innerhalb von Java Java Basics - Anfänger-Themen 6
O Änderungen innerhalb for-Schleife speichern Java Basics - Anfänger-Themen 17
J Wie auf eine Datei innerhalb des JAR-Files zugreifen Java Basics - Anfänger-Themen 2
radiac Datentypen RANDOM-punkt setzen INNERHALB eines BEREICHes Java Basics - Anfänger-Themen 2
T switchcase innerhalb Schleife: von case-Fall aus Schleife beenden Java Basics - Anfänger-Themen 3
L Timer innerhalb eines Threads Java Basics - Anfänger-Themen 3
H Klassen zur Anzeige ines Bildes und zum Zeichnen innerhalb diese Bildes Java Basics - Anfänger-Themen 2
D Datei innerhalb einer zip bearbeiten Java Basics - Anfänger-Themen 8
D .class-Datei innerhalb einer .jar-Datei verändern Java Basics - Anfänger-Themen 4
R Interface innerhalb einer Klasse definieren..? Java Basics - Anfänger-Themen 2
M Methode innerhalb Methode Java Basics - Anfänger-Themen 10
C Variable Zeichenkette innerhalb einer Schleife ersetzen Java Basics - Anfänger-Themen 4
Das Brot Relative Pfadangaben innerhalb von .jar Archiven Java Basics - Anfänger-Themen 7
C Textausgabe auf Panelen innerhalb eines Applets Java Basics - Anfänger-Themen 6
Screen Mouserobot clonen? Zeiger nur innerhalb eins Fensters? Java Basics - Anfänger-Themen 3
E Boolean wert innerhalb einer Tabelle ändern Java Basics - Anfänger-Themen 4
N aus .txt innerhalb eines JARs Zeilenweise lesen Java Basics - Anfänger-Themen 8
G Texte innerhalb von Dateien suchen Java Basics - Anfänger-Themen 9
D Relativer Pfad innerhalb jar Datei Java Basics - Anfänger-Themen 5
G Innerhalb von Runnable auf super. zugreifen? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben