Klassenverknüpfung

SnauceSnauce

Mitglied
Gibt es eine Möglichkeit 2 Klassen miteinander so zu verbinden, das man von beiden aus auf die jeweils andere zugreifen kann (am besten ohne static).
Danke für alle Antworten
 

RedGreenBlue

Mitglied
Vielleicht verstehe ich dich nicht, aber ist dies nicht generell mit public möglich?

Beispiel: Klasse A hat Methode z() und Klasse B hat Methode y()
Ist man nun in Klasse A, so kann man doch mittels
Java:
public class A{
  public static void main(String args[]){
    B.y();
  }
}
die Methode y aus der Klasse B aufrufen.

Die Klassen müssen natürlich kompiliert in einem Verzeichnis vorlegen.
 
Zuletzt bearbeitet:

SnauceSnauce

Mitglied
Aber bei Variablen bekommt man ja dann
Java:
Exception in thread "main" java.lang.NullPointerException
das ist das Problem. Von einer auf die andere zugreifen geht mit Instanzen ja einfach, aber ich kann dann von der zweiten Klasse die keine Instanz hat nicht mehr auf die andere zugreifen.
 

sirkarpfen

Mitglied
Vieleicht solltest du nochmal über das ganze nachdenken. Zwischen statischen Klassen hin und her zu hüpfen ist nicht wirklich sehr objektorientiert. Vieleicht können wir dir aber auch besser helfen, wenn du uns schreibst was du eigentlich vor hast...
 
Zuletzt bearbeitet:

SnauceSnauce

Mitglied
Erstens ich will NICHT das ich statisches verwende.
Zweitens
Java:
public class Main {
	public static Map map = new Map(0, 0);
	public static GermanTank germanTankForMap = new GermanTank(map);
	public static List<GermanTank> germanTank = new LinkedList<GermanTank>();
	public static Interface Interface = new Interface(0, 0, map);

	public static Selection selection = new Selection();
	public static Frame Frame = new Frame(selection, Interface, map, germanTank);

Von dieser Klasse geht allse aus.

Java:
public class GermanTank {
	public int x;
	public int y;
	public int referenceX;
	public int referenceY;
	public boolean b;
	public List<GermanTank> germanTank;
	public Map map;

	public GermanTank(Map map) {
		this.map = map;
	}

	public GermanTank(int x, int y, boolean b, List<GermanTank> germanTank) {
		this.x = x;
		this.y = y;
		this.b = b;
		this.referenceX = x;
		this.referenceY = y;
		this.germanTank = germanTank;
	}

	public void update() {
		x = referenceX + map.x;
		y = referenceY + map.y;
		
		System.out.println(map.getZoom());
	}

Java:
public class Map {
	public static int x;
	public static int y;
	public int mousex;
	public int mousey;
	public boolean zoomed = false;


In der class Map sind x und y als static deklariert, ich will aber erreichen, dass ich dies ohne static schaffe. Bei System.out.prin.... in der class GermanTank kommt nun der Fehler
Java:
Exception in thread "main" java.lang.NullPointerException
Aber wie beheb ich das ohne den boolean zoomed als static zu deklarieren?
 

Joose

Top Contributor
Erstens ich will NICHT das ich statisches verwende.
Zweitens
Java:
public class Main {
	public static Map map = new Map(0, 0);
	public static GermanTank germanTankForMap = new GermanTank(map);
	public static List<GermanTank> germanTank = new LinkedList<GermanTank>();
	public static Interface Interface = new Interface(0, 0, map);

	public static Selection selection = new Selection();
	public static Frame Frame = new Frame(selection, Interface, map, germanTank);

Initialisiere die Objekte in der main Methode und mache daraus keine statischen Attribute!

Java:
	public void update() {
		x = referenceX + map.x;
		y = referenceY + map.y;
		System.out.println(map.getZoom());
	}

Java:
public class Map {
	public static int x;
	public static int y;
	public int mousex;
	public int mousey;
	public boolean zoomed = false;


In der class Map sind x und y als static deklariert, ich will aber erreichen, dass ich dies ohne static schaffe. Bei System.out.prin.... in der class GermanTank kommt nun der Fehler
Java:
Exception in thread "main" java.lang.NullPointerException
Aber wie beheb ich das ohne den boolean zoomed als static zu deklarieren?

Gib einfach das static bei x und y in der Klasse Map weg! Dein Fehler ist das du das Attribut "map" in der Klasse GermanTank nie setzt (== null)! Daher die NullPointerException
das du fehlerfrei auf x und y zugreifen kannst liegt am dem static
 
Zuletzt bearbeitet:

SnauceSnauce

Mitglied
Wenn du
Java:
public int x;
	public int y;
	public int referenceX;
	public int referenceY;
	public boolean b;
	public List<GermanTank> germanTank;
	public Map map = new Map();
meinst, wird aber ein zweites Objekt erstellt, das ich aber nicht brauche, da ich das Object aus der Main class haben will.
 

Joose

Top Contributor
Wenn du
Java:
public int x;
	public int y;
	public int referenceX;
	public int referenceY;
	public boolean b;
	public List<GermanTank> germanTank;
	public Map map = new Map();
meinst, wird aber ein zweites Objekt erstellt, das ich aber nicht brauche, da ich das Object aus der Main class haben will.

Wenn du das Objekt aus der Main Klasse haben willst dann initialisiere die Objekte alle in der main-Methode und übergib die Map dem GermanTank Objekt (statische initialisierungen haben ein problem wenn andere statische Objekte im Konstruktor übergeben werden)
 

BRoll

Bekanntes Mitglied
aus der Map aus betrachtet:

Java:
class Map 

GermanTank germanTank;
...
init ()
germanTank =new GermanTank(this); // hier wird die Map übergeben
...

Somit hat die Map den Tank,
und der GermanTank hat die Map.
 

Oben