# Array mit unterschiedlichen Objekten füllen?



## 0001001 (23. Dez 2005)

Hallo,

hab hier eine Oberklasse Fahrzeug.
Dann zwei Unterklassen: Auto und LKW, die beide von der Oberklasse Fahrzeug erben.
Jedoch hat Auto zusätzlich noch das Attribut sitzplaetze
und LKW noch das Attribut maxgewicht.

Ich möchte jetzt ein Objekt-Array erstellen in dem sowohl Objekte von Auto als auch Objekte von LKW gespeichert sind.
Geht das überhaupt?

Ich denke schon, aber wenn ich das Array dynamisch befülle, gibts n Problem:

```
Fortbewegunsmittel[] AlleFahrzeuge = new Fortbewegunsmittel[anzahl];
for (int i= 0; i<anzahl; i++) {
  //... Art des Fahrzeugs wird vom Benutzer eingelesen
   if (art == 'a') {
      Auto AlleFahrzeuge[i] = new Auto();
   else
      LKW AlleFahrzeuge[i] = new LKW();
}
```

Ich glaube das das Problem schon im Array selbst liegt. Oder könnte man den Konstruktor von Auto und LKW so anpassen, dass er automatisch erkennt wenn ein Auto eingelesen wird?


----------



## na-oma (23. Dez 2005)

1. Wenn es einen Fehler gibt: diesen kopieren und mitposten

2. 
wenn dann so:

AlleFahrzeuge_ = new Auto();


außerdem solltest du dich mal entscheiden ob Fortbewegunsmittel oder Fahrzeug_


----------



## meez (23. Dez 2005)

Warum machst du nicht einen Array Fahrzeug[] ? 

Oder nimm ne  Liste (Collection)


----------



## SebiB90 (23. Dez 2005)

wenn Auto und LKW von Fortbewegunsmittel erben dann kannst du sie ganz einfach in das array rein schreiben.


----------



## 0001001 (23. Dez 2005)

danke schon mal!

Ein Array Fahrzeug geht nicht, weil Fahrzeug eine abstrakte Klasse ist.

Wenn ich folgendes mache:

```
Fahrzeug[] AlleFahrzeuge = new Fahrzeug[anzahl];
```
dann erzeuge ich doch ein Array das Fahrzeuge speichern kann.
Da jedoch Auto und LKW jeweils noch eigene Attribute haben, kann ich die dann nicht erreichen:

```
for (int i= 0; i<anzahl; i++) {
  //... Art des Fahrzeugs wird vom Benutzer eingelesen
   if (art == 'a') {
      Auto AlleFahrzeuge[i] = new Auto();
      AlleFahrzeuge[i].sitzplaetze = 5; <------------ das geht nicht weil sitzplaetze ein autospezifisches Attribut ist
   else
      LKW AlleFahrzeuge[i] = new LKW();
      AlleFahrzeuge[i].maxgewicht = 40000; <---------- das geht nicht weil maxgewicht ja nur in LKW definiert.
}
```


----------



## SebiB90 (23. Dez 2005)

doch du kannst ein array Fahrzeug erstellen
wenn du nacher die elemente auslesen willst 
kannst mit instanceof herausfinden ob das Auto oder LKW ist und dann kannst du das object dementsprechen casten und auch auf die anderen attribute zugreifen


----------



## 0001001 (23. Dez 2005)

das mache ich ja gerade schon:

```
Fahrzeug[] AlleFahrzeuge = new Fahrzeug[anzahl];
```
Das erzeugt doch ein array das fahrzeuge speichern kann.

*aber* das hier geht nicht weil sitzplaetze und maxgewicht nicht in fahrzeug sind sondern LKW bzw Auto spezifische Attribute sind:

```
for (int i= 0; i<anzahl; i++) {
  //... Art des Fahrzeugs wird vom Benutzer eingelesen
   if (art == 'a') {
      Auto AlleFahrzeuge[i] = new Auto();
      AlleFahrzeuge[i].sitzplaetze = 5; <------------ das geht nicht weil sitzplaetze ein autospezifisches Attribut ist
   else
      LKW AlleFahrzeuge[i] = new LKW();
      AlleFahrzeuge[i].maxgewicht = 40000; <---------- das geht nicht weil maxgewicht ja nur in LKW definiert.
}
```
ich will ja erstmal die elemente gar nicht auslesen sondern was drin speichern.


----------



## Lim_Dul (23. Dez 2005)

0001001 hat gesagt.:
			
		

> das mache ich ja gerade schon:
> 
> ```
> Fahrzeug[] AlleFahrzeuge = new Fahrzeug[anzahl];
> ...



Mach es so:


```
for (int i= 0; i<anzahl; i++) {
  //... Art des Fahrzeugs wird vom Benutzer eingelesen
   if (art == 'a') {
      Auto a = new Auto();
      a.sitzplaetze = 5;
      AlleFahrzeuge[i] = a;
   else
      LKW l = new LKW();
      l.maxgewicht = 40000;
      AlleFahrzeuge[i] = l;
}
```


----------



## 0001001 (24. Dez 2005)

jep so gehts. vielen dank


----------

