[Java] Objekte in anderen Klassen benutzen

08/07/2013 14:50 wasgehtso#1
Meine Frage ist, ich habe die Klasse Main erstellt, in dieser habe ich eine Box erstellt :
PHP Code:
public  Main() {
            
            
Box b1 = new Box();
            
b1.setColor("red");

diese will ich jetzt in der Klasse Wuerfel verändern, wie kann ich also die Box übernehmen um Sie in Wuerfel verändern zu können? Und wie kann ich einen Befehl von der Box also beispielsweise b1.setVisible außerhalb vom Konstrukor verwenden?
08/07/2013 18:04 Saedelaere*#2
Du solltest dein Konzept überdenken. Erstelle dir erstmal eine Klasse Würfel, in der du dann die Box erzeugst. Die Referenz auf die Box speicherst du in einem privaten Feld der Klasse und implementierst dann die entsprechenden Getter (und evtl. Setter) Methoden.

So wird beim Erstellen des Würfels automatisch die Box erstellt und du kannst dann z.b. mit
Code:
wuerfel.getBox().setVisible(true)
auch Eigenschaften der Box ändern.
08/07/2013 18:28 wasgehtso#3
Quote:
Originally Posted by Saedelaere* View Post
Du solltest dein Konzept überdenken. Erstelle dir erstmal eine Klasse Würfel, in der du dann die Box erzeugst. Die Referenz auf die Box speicherst du in einem privaten Feld der Klasse und implementierst dann die entsprechenden Getter (und evtl. Setter) Methoden.

So wird beim Erstellen des Würfels automatisch die Box erstellt und du kannst dann z.b. mit
Code:
wuerfel.getBox().setVisible(true)
auch Eigenschaften der Box ändern.
man kann die Boxen doch nur im Konstruktor erstellen, und wenn ich sie im Konstruktor erstelle, kann man dazu dann noch eine get-Methode machen?
08/07/2013 19:01 dowhile#4
Du kannst in jeder Methode Objekte anlegen.

Quote:
diese will ich jetzt in der Klasse Wuerfel verändern, wie kann ich also die Box übernehmen um Sie in Wuerfel verändern zu können?
Über den Konstruktor oder mit Setter dem Wuerfel-Objekt übergeben.

Quote:
Und wie kann ich einen Befehl von der Box also beispielsweise b1.setVisible außerhalb vom Konstrukor verwenden?
In deinem Beispiel speicherst du das Box-Objekt nur als lokale Variable. Wenn du es als Attribut speicherst, kannst du auch in anderen Methoden darauf zugreifen.
08/07/2013 19:26 Saedelaere*#5
Code:
class Wuerfel {

  private Box box = new Box();

  public Wuerfel {
    box.setColor("red");
  }

  public Box getBox() {
    return this.box;
  }

}
Code:
Wuerfel wuerfel = new Wuerfel();
wuerfel.getBox().setVisible(true);
08/07/2013 20:49 LuckyLuke#6
Generell. Klasse = Bauplan, Objekt = Instanz von Bauplan.

Wenn du im würfel objekt auf die funktionen vom main objekt zugreifen möchtest dann kannst du das über direkte referenz tun oder indem du die main zu einem Singelton machst (google: java singleton pattern).

direkte Referenz wäre so:
Code:
public  Main() {
            wuerfel w1 = new wuerfel(this);
            Box b1 = new Box();
            b1.setColor("red");
}
und in der würfelklasse siehts dann so aus
HTML Code:
public class wuerfel{
private Main main;
public wuerfel(Main _main){
   main = _main
}
}
08/08/2013 00:07 dowhile#7
Wenn er in Wuerfel nur die Box benötigt, sollte er nicht das Main-Objekt übergeben.
08/08/2013 00:46 LuckyLuke#8
Ja, du hast recht, wenn er nur die Box braucht kann er diese als direkte referenz an wuerfel übergeben anstatt main komplett.
08/08/2013 17:29 MrSm!th#9
Das was du vorgeschlagen hast, wäre auch ein Antipattern, da damit Main zu einem Gottobjekt würde.
Zudem wäre es da noch deutlich sinnvoller, das Attribut einfach als public static zu deklarieren.
Wird Main überhaupt instanziert? Die Main Methode und alles an Attributen, worauf man von dort zugreifen will, ist doch ohnehin static.