Zugriff auf ein verschachteltest Objekt

  • Themenstarter Themenstarter Destiny1985
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

Destiny1985

Gast
Folgener Programmcode ist gegeben

Code:
import java.io.*;

class MarmeladenTester2
{
  public static void main(String[] args) throws IOException
  {
    Keller marmeladenKeller = new Keller("Kirsche", 20, "02.09.2004",
                                         "Erdbeer", 15, "15.06.2005",
                                         "Apfel  ", 35, "17.10.2004");
                                         
    // marmelade1.marmeladeAusgeben();

  }
}

class Keller
{
  // Daten
  
  // Konstruktoren
  
  public Keller(String sorte1, int inhalt1, String datum1,
                String sorte2, int inhalt2, String datum2,
                String sorte3, int inhalt3, String datum3)
  {
    Marmelade marmelade1 = new Marmelade(sorte1, inhalt1, datum1);
    Marmelade marmelade2 = new Marmelade(sorte2, inhalt2, datum2);
    Marmelade marmelade3 = new Marmelade(sorte3, inhalt3, datum3);
  }
  
  // Methoden
}

class Marmelade
{
  // Daten

  private String sorte;
  private int inhalt;
  private String datum;

  // Konstruktoren

  public Marmelade( String sorte, int inhalt, String datum)
  {
    this.sorte = sorte;
    this.inhalt = inhalt;
    this.datum = datum;
  }

  // Methoden

  public void marmeladeAusgeben()
  {
    System.out.println("Sorte:  " + sorte + "  Inhalt: " + inhalt + "  Datum: " + datum);
  }
}

Die Klasse Keller simuliert einen Keller mit Marmeladenklässern (die druch die Klasse Marmelade erzuegt werden).

Mein Problem: kann ich nun von main aus nicht mehr auf das Objekt im Objekt direkt zugreifen ?

So wie in der auskommentierten Zeile...

mfg
 
Du willst von main aus auf ein Objekt in Marmelade zugreifen? Oder wo ist das Problem ?

Dann schreib doch eine getter/setter Methode dafür.

btw. der Konstruktor von Keller ist etwas "unübersichtlich".
 
ja ich weiss das er unübersichtlich ist, aber im tutorial bin ich erst soweit, wie es da ist...ka wie ich das kürzer und besser hinbekommen, das wird wohl eins der nächsten themen sein...

ich will von main aus

marmelade1.marmeladeAusgeben();

aufrufen, das geht aber nicht...wieso ?
 
Stell das Konzept von deinem Prog um.

Willst du einen eigenen Kellerspeicher/Stack implementieren?

Du kannst doch ne Liste in Keller verwenden, von main aus steckst du dann Marmeladen-Objekte rein...um darauf zugreifen zu können holst du aus der Liste dann einfach die entsprechenden Objekte.
 
mic_checker hat gesagt.:
Stell das Konzept von deinem Prog um.

Willst du einen eigenen Kellerspeicher/Stack implementieren?

Du kannst doch ne Liste in Keller verwenden, von main aus steckst du dann Marmeladen-Objekte rein...um darauf zugreifen zu können holst du aus der Liste dann einfach die entsprechenden Objekte.

hey ganz langsam mit den jungen pferden 😉

mache OO ja noch nicht lange und probiere gerade ein wenig rum.

Mein Programm soll dann sowas ähnliches werden wie in Übung 1 gefordert

http://www.gailer-net.de/tutorials/java/Notes/chap35/progExercises35.html

Nehme aber das Programm nicht als Vorlage, sondern will es zur Übung ganz alleine neu aufbauen.

Und mit Listen etc hatte ich bisher nichts am Hut == kann ich nicht :/
 
Der Umgang mit Listen ist aber nicht schwer mit dem schönen Collections Framework von Java.

Code:
private List deineListe = new ArrayList();

public Keller(Marmelade md) {
deineListe.add(md);
}

....

Wenn du dem Konstruktor von Keller ein Marmeladen Objekt übergibst kann es so machen...., kannst natürlich auch die Werte übergeben, das Marmeladen Objekt erzeugen und das dann der Liste übergeben.

Ansonsten schau dir mal die API an.

Hab extra noch nicht alles hingeschrieben, sollst ja noch bissl überlegen 😉
 
dank dir mic ... aber das will ich doch gar nicht 😉

will doch nur wissen wieso ich in main mittels

// marmelade1.marmeladeAusgeben();

nicht auf marmelade1 zugreifen und die ausgeben lassen kann !!
 
naja, in der Klasse keller wird das Objekt marmelade1 doch erzeugt...und das ist doch public...sollte man dann nicht drauf zugreifen können ? Verstehe nicht, wieso es nicht geht.

Selbst wenn ich einen Umweg gehe und in der Klasse Keller die Methode

Code:
public void kellerAusgeben()
  {
    marmelade1.marmeladeAusgeben();
  }

hinzufüge und dann unter main

Code:
marmeladenKeller.kellerAusgeben();

aufrufe geht es nicht ! er kann mit marmelade1 nichts anfangen...aber wieso 🙁
 
wenn du etwas public deklarierst (was man mit Instanzvariablen nie macht) ist es nach aussen hin sichtbar.
Das heißt du kannst ÜBER dieses Objekt auf die Marmelade zugreifen.
Code:
public void kellerAusgeben()
  {
    marmelade1.marmeladeAusgeben();
  }
Das das nicht geht ist ja wohl auch klar wenn marmelade1 keine Instanz-Variable, sondern eine lokale ist...
 
ach klar...das ding is ja jetzt nur lokal im konstruktor definiert :/ kein wunder...
 
also aktuell ist der code

Code:
import java.io.*;

class MarmeladenTester2
{
  public static void main(String[] args) throws IOException
  {
    Keller marmeladenKeller = new Keller("Kirsche", 20, "02.09.2004",
                                         "Erdbeer", 15, "15.06.2005",
                                         "Apfel  ", 35, "17.10.2004");

    marmeladenKeller.kellerAusgeben();
    marmelade1.marmeladeAusgeben();
  }
}

class Keller
{
  // Daten
  
  Marmelade marmelade1;
  Marmelade marmelade2;
  Marmelade marmelade3;
  
  // Konstruktoren
  
  public Keller(String sorte1, int inhalt1, String datum1,
                String sorte2, int inhalt2, String datum2,
                String sorte3, int inhalt3, String datum3)
  {
    marmelade1 = new Marmelade(sorte1, inhalt1, datum1);
    marmelade2 = new Marmelade(sorte2, inhalt2, datum2);
    marmelade3 = new Marmelade(sorte3, inhalt3, datum3);
  }
  
  // Methoden
  
  public void kellerAusgeben()
  {
    marmelade1.marmeladeAusgeben();
    marmelade2.marmeladeAusgeben();
    marmelade3.marmeladeAusgeben();
  }
}

class Marmelade
{
  // Daten

  private String sorte;
  private int inhalt;
  private String datum;

  // Konstruktoren

  public Marmelade( String sorte, int inhalt, String datum)
  {
    this.sorte = sorte;
    this.inhalt = inhalt;
    this.datum = datum;
  }

  // Methoden

  public void marmeladeAusgeben()
  {
    System.out.println("Sorte:  " + sorte + "  Inhalt: " + inhalt + "  Datum: " + datum);
  }
}

die ausgabe mit

Code:
public void kellerAusgeben()
  {
    marmelade1.marmeladeAusgeben();
    marmelade2.marmeladeAusgeben();
    marmelade3.marmeladeAusgeben();
  }
funktioniert jetzt, allerdings noch nicht die "direkte" ausgabe über

Code:
marmelade1.marmeladeAusgeben();

...da kann man nichts machen ?

mfg
 
Wenn du in deiner main das schreibst:

Code:
marmelade1.marmeladeAusgeben();

Wie soll deine Klasse mit der main Zugriff auf marmelade1 haben? Du musst noch angeben das es in der Klasse Keller ist, also marmeladenKeller.marmelade1 etc.

Allerdings ist das kein sauberer Programmierstil.

Oder du schreibst getter Methoden.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben