Hi,
ein kleines Beispiel:
Klasse Buch
Java:
public class Buch
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
Deine 2. Klasse (ich nenn sie mal KlasseInnen):
Java:
public class KlasseInnen
{
/*
* Entweder als Klassenvariable mit Getter
*/
private static Buch buch; // <- Muss irgendwo zugewiesen werden!
public static Buch getBuch()
{
return buch;
}
/*
* Oder in einer Methode, falls du das Buch-Objekt sonst nicht extra in der Klasse speichern willst
*/
public static Buch methodeDieIrgendwasMacht()
{
Buch buch = new Buch();
// Irgendwas mit dem Buch machen
return buch; // <- Rückgabe buch
}
}
Deine 3. Klasse (ich nenn sie mal KlasseAussen):
Java:
public class KlasseAussen
{
public static void machtAuchIrgendwas()
{
// Entweder Getter aus Klasse 2
Buch buch = KlasseInnen.getBuch();
// Oder Methode die irgendwas macht...eigentlich das gleiche, da der Getter ja auch was macht -> das Buch zurückgeben
Buch buch = KlasseInnen.methodeDieIrgendwasMacht();
}
}
Ich glaube dein eigentliches Problem war von Anfang an, dass du nicht weißt, wie du Klassen-Methoden aufrufen kannst. Der kleine aber feine Unterschied ist das Schlüsselwort
static. Das hat zur Folge, dass du die Methode auch aufrufen kannst, wenn du kein Objekt aus der Klasse bildest (eben über {Klassenname}.{Methodenname}).
Das geht mit Variablen übrigens auch (man redet dann von Instanzvariablen oder eben mit static von Klassenvariablen).
Stell es dir einfach mal so vor:
Variablen und Methoden ohne static sind immer Teil eines Objektes. D.h. wenn du 2 Bücher machst, können diese unterschiedliche Namen haben usw.
Wenn du dann buch1.setName() machst, wird die Methode für buch1 aufgerufen, d.h. der Name von buch1 wird geändert. Nicht der von buch2.
Bei statischen Variablen und Methoden sieht das ein bisschen anders aus. Die sind Teil der Klasse, nicht des Objekts. Wenn du also eine statische Variable in buch1 änderst, ist der Wert auch in jedem anderen Buch geändert. Weil der Wert eben in der Klasse gespeichert ist, nicht im Objekt.
Bei Methoden ist das genauso. Und da diese in der Klasse sind, musst du sie auch mit dem Klassennamen aufrufen (nochmal: {Klassenname}.{Methodenname}).
Das ist natürlich alles stark vereinfacht dargestellt, aber hilft dir hoffentlich, eine kleine Vorstellung zu bekommen, wie es funktionert.
Gruß
Daniel