# Attribut als Referenz auf Objekt



## Kenelope (5. Jan 2010)

Hallo Leute, hab da mal eine Frage.
Ich bin gerade ein Programm am schreiben. Ein Superman hat verschiedene Attribute wie name, knowlegde, personalTime usw. Außerdem hat dieser Superman ein Attribut das personalMission heißt, vom Typ Mission ist und das eine Referenz auf die Mission sein soll, die er zu erfüllen hat. Die Mission ist in einer anderen Klasse beschrieben.
Jetzt sagt mir das, dass ich da irgendwie auf die Referenz der Klasse Mission zugreifen soll, doch ist mir das mit den Referenzen usw noch nicht so geläufig.

Code:

class Superman implements vergesslich
 {
	private String realName; 
	private int knowledge;  
	private static int superheroes = 0;
	private personalMission = new Mission();  //hier mein Problem
	private double personalTime;

	public Superman(String realName, int knowledge, Mission personalMission, double personalTime)
	{
		this.realName = realName;
		this.knowledge = knowledge;
		this.personalMission = personalMission;
		this.personalTime = personalTime;
		this.knowledge = knowledge;
		superheroes++;
	}
           ...

______________________________________
public class Mission
{
	private double missionTime;
	private int difficulty;

	Mission(double missionTime, int difficulty)
	{
		this.missionTime = missionTime;
		this.difficulty = difficulty;
	}
            ...
Kann mir da bitte jemand auf die Sprünge helfen, ich weiß einfach nicht wie ich das Attribut personalMission als Referenz auf die Klasse Mission mache

mfg
Kenelope


----------



## TobiTobsen (5. Jan 2010)

Der Konstruktor von Mission erwartet Parameter.


```
Mission(double missionTime, int difficulty)
{
this.missionTime = missionTime;
this.difficulty = difficulty;
}
```


Die missionTime und difficulty musst Du übergeben. Oder machst das später mit set-Methoden und machst Konstruktor ohne Parameter bzw. lässt den default-Konstuktor das machen. 

Grüße,
Tobi

edit:
Wobei du ja eh die Refernz auf eine Mission im Konstrukter von dem Superheld übergibst. 
Also erzeug doch auch erst die Mission im Konstruktor der Helden und nicht weiter oben beim erzeugen der ganzen Variablen.


----------



## eRaaaa (5. Jan 2010)

```
private personalMission = new Mission(); //hier mein Problem
```

Naja, da du später dem Superman eine Mission beim Konstruktor übergeben willst, solltest du dort also personalMission nur deklarieren:


```
private Mission personalMission;
```

Im Konstruktor übergibst du ja dem Superman dann eine Mission und setzt diese

```
this.personalMission = personalMission;
```

Das ist korrekt!

Um einen Superman also zu erstellen, brauchst du vorher eine Mission:


```
Mission mission1 = new Mission();
Superman superman = new Superman(....,...,mission1,....);
```


----------



## TobiTobsen (5. Jan 2010)

Hier ist noch n Fehler: 


```
private personalMission = new Mission();
```

Die personalMission hat gar keinen Variablentyp.

So besser:


```
private Mission personalMission;
```

Und wie gesagt im Konstruktor die übergebene Mission zuweisen.


----------



## Kenelope (5. Jan 2010)

so weit ist der Stand mit meinem Code:

class Superman implements vergesslich
 {
	private String realName; 
	private int knowledge;  
	private static int superheroes = 0;
	private Mission personalMission;
	private double personalTime;

	//Konstruktor
	public Superman(String realName, int knowledge, Mission personalMission, double personalTime)
	{
		personalMission = new Mission(0, 0);   //erzeugen der Mission im Kontruktor des Helden
		this.realName = realName;
		this.knowledge = knowledge;
		this.personalMission = personalMission;
		this.personalTime = personalTime;
		this.knowledge = knowledge;
		superheroes++;
	}
           ...

Ich weiß nicht ob du das so gemeint hast TobiTobsen. Ich bekomm noch eine Fehlermeldeung:

...\JCreator LE\MyProjects\Superman.java:55: cannot find symbol
symbol  : constructor Superman(java.lang.String,int,java.lang.String,int)
location: class Superman
        s = new Superman("Hans", 1, "Retten", 10);
            ^
1 error

Wieso bekomme ich gerade einen Fehler in der Main - Methode wenn ich den Superhelden erzeuge? Das verstehe ich einfach nicht.


----------



## Michael... (5. Jan 2010)

In dem geposteten Code existiert nur ein Konstruktor und der erwartet Paramenter vom Typ: *String, int, Mission, double* und nicht String, int, String, int


----------



## Kenelope (5. Jan 2010)

Ok, ich verstehe das ich in dem Konstruktor Mission anstatt String übergeben muss. Doch wie mache ich das? Int ist eine Zahl, String ist sowas "bababalbabla" aber wie übergebe ich etwas vom Typ Mission im Kontruktor?


----------



## Michael... (5. Jan 2010)

Leider kenne ich die Klasse Mission nicht und weiss daher auch nicht welche Konstuktoren sie anbietet. So in der Art könnte man das sicher machen:

```
s = new Superman("Hans", 1, new Mission(), 10d);
```


----------



## eRaaaa (6. Jan 2010)

```
personalMission = new Mission(0, 0); //erzeugen der Mission im Kontruktor des Helden
```

muss aus dem Konstruktor dann aber raus ! Hat da ja eh nichts zu suchen !

p.s.: Schreib doch bitte dein Code in Java-Tags [J A V A] [/code]


----------

