Klassen Eine Klasse in mehreren Klassen einbinden

me.lina

Mitglied
Hi,
eigentlich ist das wohl etwas, was man sehr oft braucht, dennoch konnte ich keine Lösung ergooglen (wohl die falschen suchbegriffe).

Also wie ich die Methoden einer Klasse in einer anderen Aufrufe ist mir klar:
Klassenname name = new Klassenname();
und dann anwenden mit name.methode bzw. name.parameter.

Mein Problem liegt darin, wie ich das mache, wenn ich z.b. den selben Parameter in verschiedenen Klassen benötige. Das Problem wird z.b. sehr schnell in Swing deutlich, da dort mit jeder Initialisierung das gleiche Fenster nochmals aufpoppt.

Ich hab mal versucht ein möglichst simples Beispiel des Problems zu erstellen.
Im Hauptprogramm in Klasse A sollen erst einmal alle Methoden ausgeführt werden, dann benötigt aber auch Klasse B eine initalisierung von Klasse C damit es methodeC aufrufen kann. Soll Klasse C methodeB aufrufen können, müsste ich das gleiche machen, das führt aber logischerweise zu einem Loop.

Java:
public class A{

   
    public static void main(String[] args) {
        B b = new B();
        C c = new C();
        System.out.println("Klasse A ruft methodeB:");
        b.methodeB();
        System.out.println("Klasse A ruft methodeC:");
        c.methodeC();
    }
}

Java:
public class B {
      
    B(){
    C c = new C();
    System.out.println("Klasse B ruft methodeC:");
    c.methodeC();
    }
   
   
    public void methodeB(){
        System.out.println("Test B");
        }

}

Java:
public class C {
   
    //Erzeugt Loop
    /*C(){
    B b = new B();
    System.out.println("Klasse C ruft methodeB:");
    b.methodeB();
    }*/
   
    public void methodeC(){
        System.out.println("Test C");
        }

}

Wäre das ein Swing-Code, wäre zudem Fenster B schon 2x vorhanden.

Wie kann ich nun also die Methoden und Paramter von Klasse B z.B. in Klasse C einbinden?
nur mit B b; hab ich es schon versucht.

Der Beispielcode mit sysout macht natürlich nicht viel Sinn, aber ich denke er verdeutlicht das Problem ganz gut.
In meinem realen Problem muss ich die Parameter und methoden zwischen verschiedenen Panels und Fenstern hin und her geben und würde mir dadurch auch loops erzeugen.

Bestimmt ist die Lösung relativ simpel.

lg
 

me.lina

Mitglied
vielleicht denkst du ja an ein anderes importieren als ich? ich mache das wie gesagt immer mit Klasse name = new Klasse(); und wenn ich das in C nun machen würde, würde ich wie geschrieben einen loop erzeugen. Deshalb ist ein Teil des Codes in C auch auskommentiert.
 

Joose

Top Contributor
Der Konstruktor sollte nur das Objekt initialisieren also die Attribute mit (gültigen) Startwerten belegen.

In dem Beispiel wie deinem würde ich mir überlegen ob das Design nicht falsch ist. Ansonsten deklariere in beiden Klassen eine "initialize" Methode, welche jeweils ein Objekt der anderen Klasse als Parameter entgegen nimmt.
 

me.lina

Mitglied
Entweder übergibst Du einmal erzeugte Objekte an die jeweiloigen Konstruktoren

meint ihr das derart? Irgendwie scheine ich euch dabei wohl falsch verstanden zu haben.
Java:
public class A{

    public static void main(String[] args) {
        B b = new B();
        C c = new C(b);
        System.out.println("Klasse A ruft methodeB:");
        b.methodeB();
        System.out.println("Klasse A ruft methodeC:");
        c.methodeC();
    }
  
}
Dann bekomme ich nur in Klasse B probleme, da die Variable b (welche an C übergeben werden soll) nicht gefunden wurde.
Java:
public class B {
    B(){
    C c = new C(b); //Fehler: b nicht gefunden
    c.methodeC();
    }
    public void methodeB(){
        System.out.println("Test B");
        }

}

Java:
public class C {
  
    C(B b){
    System.out.println("Klasse C ruft methodeB:");
    b.methodeB();
    }
  
    public void methodeC(){
        System.out.println("Test C");
        }

}

Das funktioniert natürlich erstrecht nicht:
Java:
public class A{

    public static void main(String[] args) {
        B b = new B(c);   //Fehler: c nicht gefunden
        C c = new C(b);
        System.out.println("Klasse A ruft methodeB:");
        b.methodeB();
        System.out.println("Klasse A ruft methodeC:");
        c.methodeC();
    }
  
}

Ja ich gebe zu, wahrscheinlich hätte ich doch ein umfangreicheres beispiel (in swing) nutzen sollen, ich wollte es nur möglichst simpel halten.
Aber letztenendes scheint ihr ja zum Glück verstanden zu haben, was ich meinte.

edit: bzw mal anders gefragt, wie würde man das denn normalerweile lösen, wenn man Parameter zwischen mehreren Klassen hin und her geben und Methoden aufrufen will?
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
hmm, das schein bei Dir noch einige Grundlagen zu fehlen ... ;)

Java:
public class A 
{
    public static void main( String[] args)
   {
        B b = new B();
        C c = new C();  // ist ok, 'b' ist bekannt

dann:
public class B
{
B()
{
C c = new C( b ); //Fehler: b nicht gefunden
// klar, 'b' ist hier ja auch nicht deklariert
// ----
// theoretisch so:
C c = new C( this );
}
[/code]
gilt dann für den Rest entsprechend!

theoretisch geht sowas:
Java:
public class A
{
  public static void main(String[] args)
  {
  B b = null;
  C c = null;
  b = new B(c);
  c = new C(b);
  }
}
Du musst dann in den Konstruktoren prüfen, pber das übergebene Objekt null ist oder nicht !

IMHO macht ein solches Konstrukt aber auch keinen Sinn. Was willst Du einer solchen Klasse ?

Gruß Klaus
 
Zuletzt bearbeitet:

me.lina

Mitglied
Naja Grundlagen eigentlich nicht wirklich, nur mit der erweiterten Vererbung ( nicht nur von A nach B) hab ich mich bislang nicht beschäftigt.
(Warum im letzten Beispiel Fehler gezeigt werden, war mir natürlich klar, nur nicht wie eben die Lösung auszusehen hätte)

Ich umschreibe das Ziel/Problem am Beispiel meines Programms noch mal (aber eigtl ist das kein swing-problem, deshalb wollte ich es einfacher halten):

Klasse Haupt ruft einfach nur das ganze Programm auf.
Klasse GUI erstellt die grafische Oberfläche (class GUI extends JFrame)
Klasse Daten ist zum speichern der Daten in eine Liste da
Klasse Panel1 erstellt das Anzeigepanel (class Panel1 extends JPanel)
Klasse Panel2 erstellt das Controlpanel (class Panel2 extends JPanel)


"GUI" initialisiert die Panel
"Panel2" muss nun auf Methoden und Parameter von Daten, GUI und Panel1 zugreifen können
"Panel1" muss auf GUI zugreifen können
 

Joose

Top Contributor
Hast du dir meinen Vorschlag überhaupt mal angeschaut bzw. überlegt?

Java:
public class A {
   public static void main(String[] args) {
     B b = new B();
     C c = new C();
     b.init(c);
     c.init(b);
     
     System.out.println("Klasse A ruft methodeB:");
     b.methodeB();
     System.out.println("Klasse A ruft methodeC:");
     c.methodeC();
   }
}

public class B {   
   B() {
   }
   
   init(C c) {
     System.out.println("Klasse B ruft methodeC:");
     c.methodeC();
   }
   
   public void methodeB() {
     System.out.println("Test B");
   }
}

public class C {
   C() {
   }
   
   public init(B b) {
     System.out.println("Klasse C ruft methodeB:");
     b.methodeB();
   }
   
   public void methodeC() {
     System.out.println("Test C");
   }
}

Aber ich würde immer noch auf einen Designfehler tippen ;)
 

me.lina

Mitglied
So, jetzt bin ich wieder da. Natürlich habe ich deinen Beitrag vorhin gelesen, auch wenn er aufgrund der Formatierungsfehler ziemlich schwierig zu lesen war.
Aber du fragtest auch, was ich mit einer solchen Klasse will, also hab ich dir umschrieben, welches Prinzip ich verfolge.
Ich werd jetzt mal gucken, ob sich das in meinem eigentlichen Programmcode umsetzen lässt, beim ersten Test vorhin zwischen Tür und Angel, wollte es nicht.
 

Joose

Top Contributor
So, jetzt bin ich wieder da. Natürlich habe ich deinen Beitrag vorhin gelesen, auch wenn er aufgrund der Formatierungsfehler ziemlich schwierig zu lesen war.
Hm, ich habe oben doch nur 2 Sätze geschrieben, komisch das sich da Formatierungsfehler eingeschlichen haben, aber egal.

Aber du fragtest auch, was ich mit einer solchen Klasse will, also hab ich dir umschrieben, welches Prinzip ich verfolge.
Jap das habe ich gelesen. Wenn du sowas realisieren willst dann musst du einfach beachten das der Konstruktor dazu da ist ein Objekt in einen gültigen Zustand zu bringen, mehr nicht. Also keinen weiteren Code ausführen
Sprich Parameter prüfen und Attribute setzen.
Weitere Initialisierungen könnten eben wie von mir gezeigt in einer "init" Methode vorgenommen werden.

"GUI" initialisiert die Panel
"Panel2" muss nun auf Methoden und Parameter von Daten, GUI und Panel1 zugreifen können
"Panel1" muss auf GUI zugreifen können

Einfachste Lösung:
Java:
public class GUI extends JFrame {
   private Panel1 panel1;
   private Panel2 panel2;
  
   public GUI() {
     panel1 = new Panel1(this);
     panel2 = new Panel2(this);
   }
}

public class Panel1 extends JPanel {
   private GUI gui;
  
   public Panel1(GUI gui) {
     this.gui = gui;
   }
}

public class Panel2 extends JPanel {
   private GUI gui;
  
   public Panel2(GUI gui) {
     this.gui = gui;
   }
}

Was mir aber gar nicht gefällt ist das GUI und Panel1/2 von JFrame bzw. JPanel ableiten.
Man erweitert eine Klasse wenn man deren Funktionalität erweitern/anpassen will, nicht aber wenn ich nur ein bestimmtes Layout definieren will oder ähnliches
Dazu dieser Link: java - Why shouldn't you extend JFrame and other components? - Stack Overflow
 

me.lina

Mitglied
Hm, ich habe oben doch nur 2 Sätze geschrieben, komisch das sich da Formatierungsfehler eingeschlichen haben, aber egal.
Ja die Zitate waren irgendwie "verpfuscht" und voll mit BBCode, aber wie du schon sagtest: auch egal.

Also ich habs mit der Übergabe gemacht, gestern noch mal bissl Ordnung reingebracht, weil das irgendwann ein riesen Chaos war, aber es geht. Ist nicht hübsch, aber geht. Danke also soweit :) den letzten Hinweis guck ich mir dann auch die Tage noch mal an.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
Sogomn Klassen Alle in eine Klasse Allgemeine Java-Themen 11
S Eine Klasse die jeden String nur einmal annimmt Allgemeine Java-Themen 4
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
C Auf eine Methode von einer anderen Klasse aus ändern? Allgemeine Java-Themen 4
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
Z Daten von einer Klasse in eine andere übertragen Allgemeine Java-Themen 8
X Java findet eine Enum Klasse nicht Allgemeine Java-Themen 2
S String in eine andere Klasse übergeben Allgemeine Java-Themen 25
S Mit einem jButton eine andere Klasse öffnen Allgemeine Java-Themen 2
S mit Class eine Klasse nur einmal instantiieren Allgemeine Java-Themen 4
N Klasse rausfinden, an der eine statische Methode aufgerufen wurde ? Allgemeine Java-Themen 10
J Java-Datei unter Mac OS X öffnen - eine Frage der Klasse Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
G ComboBox: Nur eine Art Klasse zulassen (Generics) Allgemeine Java-Themen 3
L Zur Laufzeit eine Klasse laden, die auf jar-File zugreift Allgemeine Java-Themen 15
R Wert von einer Klasse in eine andere bekommen Allgemeine Java-Themen 6
P Eine Klasse die org.w3c.dom.DOM implementiert Allgemeine Java-Themen 3
P eine KeyAdapter Klasse Allgemeine Java-Themen 3
T Mehrere Threads greifen auf eine Klasse zu Allgemeine Java-Themen 21
D Eine geladene Klasse aus dem Speicher holen? Allgemeine Java-Themen 9
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
A Eine Datei in einer Klasse Allgemeine Java-Themen 14
T compareTo auf eine Klasse anwenden Allgemeine Java-Themen 20
S ClassCastException beim Casten in eine Klasse Allgemeine Java-Themen 7
Zrebna Aus einer jar-Datei eine exe-Datei erzeugen lassen Allgemeine Java-Themen 37
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8

Ähnliche Java Themen


Oben