Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird

Zweifaenger

Mitglied
Einfach in der Klasse ein Attribut vom entsprechenden Typ hinzufügen und per setter Methode das Objekt übergeben.

Dazu eine Frage, irgendwie komme ich nicht drauf wie das umgesetzt werden soll. Könnte mir das jemand am folgenden Code einmal vor machen?


Java:
import gui.Konsole;
 
 
public class moviestore {
 
	public static void main(String[] args) 
	{
		Konsole k = new Konsole();
		k.aktionHinzufuegen("Startpanel geöffnet!");
 
	}
 
	public Konsole getKonsole()
	{
		return k;
	}
}


Ich möchte aus irgendeiner anderen Klasse auf die Methode "aktionHinzufuegen(String)" von der Konsole zugreifen, welche aber nur ein mal in der Klasse moviestore erzeugt werden soll.

Vielen Dank
 
Das Zitat oben ist ohne Zusammenhang schwer zu verstehen.

Meinst du vielleicht so etwas?

Java:
public class Moviestore {

	private Konsole k = new Konsole();

	public static void main(String[] args) {

		Moviestore store = new Moviestore();
		store.k = new Konsole();

		store.k.aktionHinzufuegen("Startpanel geöffnet!");

	}

	public Konsole getKonsole() {
		return this.k;
	}
}

class AnotherClass {

	private Moviestore moviestore = new Moviestore();

	public void getData() {

		Konsole returnedKonsole = this.moviestore.getKonsole();
		returnedKonsole.aktionHinzufuegen("");
	}

}

class Konsole {

	public void aktionHinzufuegen(String s) {

	}

}

Geh vielleicht lieber nochmal einen Schritt zurück und schau dir die Grundlagen an, bevor du wild irgendwelche Objekte von A nach B schiebst...
 
Meinst du vielleicht so etwas?

Java:
public class Moviestore {

	private Konsole k = new Konsole();

	public static void main(String[] args) {

		Moviestore store = new Moviestore();
		store.k = new Konsole();

		store.k.aktionHinzufuegen("Startpanel geöffnet!");

	}

	public Konsole getKonsole() {
		return this.k;
	}
}

class AnotherClass {

	private Moviestore moviestore = new Moviestore();

	public void getData() {

		Konsole returnedKonsole = this.moviestore.getKonsole();
		returnedKonsole.aktionHinzufuegen("");
	}

}

class Konsole {

	public void aktionHinzufuegen(String s) {

	}

}


Danke, kannst du mir erklären wo drin der Sinn liegt wenn ich in der Klasse Moviestore erneut einen moviestore erzeuge? Und warum tue ich das gleiche nochmal in AnotherClass? Dann müsste ich doch 3 moviestores haben oder? ???:L
 
Ich glaube, du verwechselst hier Klassen mit Instanzen.

In Moviestore brauchst du eine Instanz davon, um die Konsole instanzieren zu können.
In der AnotherClass-Klasse brauchst du die Instanz davon, um die "GetKonsole" aufrufen zu können.


Zugegeben, hier habe ich gepennt:
k muss nicht zweimal Instanziert werden, einmal reicht.

Java:
public class Moviestore {
 
	private Konsole k;
 
	public static void main(String[] args) {
 
		Moviestore store = new Moviestore();
		store.k = new Konsole();
 
		store.k.aktionHinzufuegen("Startpanel geöffnet!");
 
	}
 
	public Konsole getKonsole() {
		return this.k;
	}
}


Um den Rest deiner Frage beantworten zu können, müsstest du genauer beschreiben, was du eigentlich vor hast.
Von einer Klasse mehrere Instanzen in verschiedenen Klassen zu haben, ist nicht unbedingt falsch.
 
Hast du vielleicht einen Link der mir den Unterschied zwischen Klasse und Instanz erklärt? Habe da nichts zu gefunden..
Was bewirkt das
Java:
Moviestore store = new Moviestore();
denn genau? Ich hab das so interpretiert dass ich damit einen neuen "moviestore" erstelle.



Also folgendes habe ich vor:

Ich habe 3 Klassen: die Hauptklasse moviestore, die Klasse Konsole und die Klassen Controlpanel1,2,3,4.....
Wenn ich die Hauptklasse starte, soll diese eine Konsole und das Controlpanel1 erzeugen.
In Controlpanel1,2,3,4 möchte ich dann auf eine Methode der Konsole zugreifen, welche ich in der Hauptklasse erzeugt habe.
 
Eine Klasse ist sowas wie ein Bauplan, die Instanz eine konkrete Implementierung mit veränderlichen Werten.
Beispiel: Klasse Auto mit den Eigenschaften Farbe, Besitzer, Marke, etc. Eine Instanz davon hat dann z.B. die konkreten Werte Besitzer: Zweifaenger, Farbe: Rot, Marke: VW.


Das heißt, du möchtest einfach nur vermeiden, dass von der Konsole mehrere Objekte rumschwirren?
Dafür gibt es das sogenannte Singleton-Pattern:


Java:
class Konsole {
        
	private static Konsole instance;	
	
	public static Konsole getInstance(){

         //Prüfe: Gibt es bereits ein Objekt davon? Ja: gib das zurück, nein: erzeuge es
		if(instance == null){ 
			instance = new Konsole();
		}
		return instance;		
	}
	
        // Klasse ist von außen nicht mehr instanzierbar. 
	private Konsole(){}	
	
        // alle anderen Aktionen, die du so brauchst
	public void aktionHinzufuegen(String s) {

	}
}

Über Konsole.getInstance() holst du dir jetzt die Konsoleninstanz, wenn du sie benötigst. Probiers aus: schreib normale Konsole k = new Konsole(). Es wird nicht funktionieren, da der Konstruktor privat ist. An ein Objekt Konsole kommst du nur noch über Konsole.getInstance().
 
Eine Klasse ist sowas wie ein Bauplan, die Instanz eine konkrete Implementierung mit veränderlichen Werten.
Beispiel: Klasse Auto mit den Eigenschaften Farbe, Besitzer, Marke, etc. Eine Instanz davon hat dann z.B. die konkreten Werte Besitzer: Zweifaenger, Farbe: Rot, Marke: VW.


Das heißt, du möchtest einfach nur vermeiden, dass von der Konsole mehrere Objekte rumschwirren?
Dafür gibt es das sogenannte Singleton-Pattern:


Java:
class Konsole {
        
	private static Konsole instance;	
	
	public static Konsole getInstance(){

         //Prüfe: Gibt es bereits ein Objekt davon? Ja: gib das zurück, nein: erzeuge es
		if(instance == null){ 
			instance = new Konsole();
		}
		return instance;		
	}
	
        // Klasse ist von außen nicht mehr instanzierbar. 
	private Konsole(){}	
	
        // alle anderen Aktionen, die du so brauchst
	public void aktionHinzufuegen(String s) {

	}
}

Über Konsole.getInstance() holst du dir jetzt die Konsoleninstanz, wenn du sie benötigst. Probiers aus: schreib normale Konsole k = new Konsole(). Es wird nicht funktionieren, da der Konstruktor privat ist. An ein Objekt Konsole kommst du nur noch über Konsole.getInstance().

Exakt das habe ich auch gerade gefunden. Hab es damit umgesetzt und es funktioniert. Vielen Dank
 

Zurück
Oben