Objekte an andere Klassen/Methoden übergeben?

it-girl

Aktives Mitglied
Hallo zusammen,

wahrscheinlich ist das eine ganz einfache, dumme Fragen, aber ich checks grad echt nimmer 🙁

Also ich schreibe gerade an einem Programm, das mir eine Baumstruktur graphisch darstellen soll. Die Knoten kann ich - theoretisch - alle erzeugen, also es ging mal und dann habe ich meine eine große Klasse dann mal in mehrere kleine aufgeteilt (Wartbarkeit und so) und die Knoten-Objekte dann eben nicht mehr innerhalb der Klasse übergeben, sondern halt dann in andere Klassen. Ich vermute, dass das der Grund ist, warum es mir nun keinen Graph mehr anzeigt, das Programm aber trotzdem keine Fehler wirft :noe:
Könnte das was damit zu tun haben? Und wenn ja, warum kann ich keine Objekte an andere Klassen übergeben?

Bitte helft mir, ich komm hier grad echt nicht weiter ;(

Danke schon mal für eure Antworten!

LG
it-girl
 
Und wenn ja, warum kann ich keine Objekte an andere Klassen übergeben?


Zunächst zur Begriffsklärung: Eine Klasse ist ein Blueprint und kann keine Objekte empfangen, höchstens eine Instanz dieser Klasse ist in der Lage, ein Objekt zu übernehmen! Somit lautet die Antwort zu Deiner Frage: nein! Natürlich kann man Objekte an eine Instanz einer anderen Klasse übergeben. Die fremde Klasse kann dann das Objekt verändern d.h. neue Knoten hinzufügen etc. Was sich nicht ändern lässt, ist die Referenz des Objekts. Poste doch auszugsweise etwas von Deinem Code, dann wird es auch konkret.
 
Zuletzt bearbeitet:
Also kann ich aber dem Konstruktor oder einer Methode der Klasse ein Objekt übergeben?
Muss ich dazu in der einen Klasse eine Instanz der anderen Klasse erzeugen, der ich das Objekt übergeben will oder reicht es, wenn ich einfach nur eine Variable dafür deklariere (zB
Code:
Klasse2 klasse2;
)?

Noch eine ähnliche Frage:
Wenn ich aus Klasse1 auf eine Methode oder eine Variable der Klasse2 zugreifen will, muss ich dazu die Klasse2 in Klasse1 instanziieren, also
Code:
Klasse2 klasse2 = new Klasse2();
, oder reicht hier eine Deklaration wie oben?
 
Naja, wenn wir schon so pindelig sein wollen, dann kann man keine Objekte an eine Instanz einer anderen Klasse übergeben, sondern nur die Referenz zu diesen Objekten.

Je nach dem, was du da in deinem Code hast, kann es sein, dass du irgendwo, statt die Referenz zu übernehmen, ein neues Objekt erzeugst oder umgekehrt. Poste am besten einfach mal die Abschnitte, wo die "Knoten" deklariert,initialisiert und übergeben werden. Also alles was mit den Knoten zu tun hat. Dann wird dir sicherlich einer helfen.

EDIT: Du kannst so etwas machen
Java:
public Class Klasse2 {

   Klasse1 klasse1;

   public Klasse2(Klasse1 klasse1){
      this.klasse1 = klasse1;
      //weiterer Code
   }
   //Methoden etc
}
Und dann z.B je nach dem wo do die Objekte erzeugst dann so etwas:
Java:
public Class Test {

   public static void main(String agrs[]) {
      Klasse1 klasse1 = new Klasse1();
      Klasse2 klasse2 = new Klasse2(klasse1);
   }
}

Somit hast du die Möglichkeit innerhalb der klasse2 das Objekt der Klasse1 (also klasse1 in dem Fall) zu Verändern (also in so fern, dass du auf die public Methoden und Variablen zugreifen kannst).

Wenn du dir aber innerhalb der Klasse2 ein neues Objekt erstellst, mit new Klasse1() ist das nicht mehr das Objekt, dass du verändern wolltest, sondern ein neues.
 
Zuletzt bearbeitet:
Java:
public class Klasse1 {

	private String einString = "it-girl";

	public void printEinString() {
		System.out.println(einString);
	}

	public String getEinString() {
		return einString;
	}
}

billige, einfach Java-Klasse mit einer Instanzvariablen vom Typ
Code:
String
, dem Namen [c]einString[/c] mit dem Inhalt
Code:
it-girl
, einer passende Getter-Methode dafür und der Methode [c]printEinString()[/c]

Eine andere Klasse, die als Übergabe die Klasse1 bekommt, bzw. eine Referenz darauf.

Java:
class EineAndereKlasse {
	private String einString = "out-girl";
	private Klasse1 klasse1;

	public EineAndereKlasse(Klasse1 klasse1) {
		this.klasse1 = klasse1;
	}

	public void printEinString() {
		System.out.println(einString);
	}

	public Klasse1 getKlasse1() {
		return klasse1;
	}

	public String getEinString() {
		return einString;
	}
}

Wenn du jetzt auf die
Code:
printEinString()
-Methode der
Code:
Klasse1
aus
Code:
EineAndereKlasse
zugreifen willst...brauchst du so ein Konstrukt:
Java:
Klasse1 klasse1 = new Klasse1();
		EineAndereKlasse eineAndereKlasse = new EineAndereKlasse(klasse1);
		eineAndereKlasse.getKlasse1().printEinString();
//oder auch
eineAndereKlasse.klasse1.printEinString();
 

Zurück
Oben