# Array mit neuen Objekten der selben Klasse füllen



## ganonlight (12. Feb 2011)

Hallo^^ 
Ich hab ein Superklassen-Array mit verschiedenen Unterklassen-Objekten, nämlich:

```
Monster m = { new Monster1(), new Monster2(), new Monster3() };
```
Bei einer bestimmten Aktion wird durch Zufall eins dieser Objekte aufgerufen. Danach soll statt jedem Objekt in dem Array ein neues Objekt der selben Sub-Klasse eingesetzt werden.
Meine Idee war folgende: ich schreib in die Super-Klasse eine abstract-Methode:

```
public abstract Monster neuesObjektErstellen();
```
Diese muss dann ja in jeder Sub-Klasse überschrieben werden, z.B. in Monster1:

```
public Monster neuesObjektErstellen(){
    return new Monster1();
}
```
Dann sollte ich ja das machen können:

```
for( int i = 0; i < m.length; i++ ){
    m[ i ] = m[ i ].neuesobjektErstellen();
}
```

Passt das so, oder gibts da eine bessere Möglichkeit in Java?


----------



## tagedieb (13. Feb 2011)

Man kann das so machen, aber ist nicht sehr schoen. Aus OO Sicht ist die Methode 
	
	
	
	





```
neuesobjektErstellen()
```
 in der Klasse 
	
	
	
	





```
Monster
```
 fehl am Platz. Ausserdem sollte die Methode *static* sein und 
	
	
	
	





```
newInstance()
```
 heissen.

Alternative (fallse du ueberall einen non-Argument Constructor verwendest:

```
for( int i = 0; i < m.length; i++ ){
    m[ i ] = (Monster) m[ i ].getClass().newInstance();
}
```

oder das Interface _Cloneable_ verwenden.

Wenn die Initialisierung etwas komplexer ist kannst du auch ein Build/Factory Designpattern verwenden.

Die beste Loesung haengt natuerlich vom logischen Hintergrund ab, denn ich leider nicht kenne und auch nicht ersehen.


----------



## ganonlight (13. Feb 2011)

tagedieb hat gesagt.:


> Alternative (fallse du ueberall einen non-Argument Constructor verwendest:
> 
> ```
> for( int i = 0; i < m.length; i++ ){
> ...



Danke, genau sowas hab ich gemeint, funzt perfekt 8)


----------

