Les fonctions de mes classes ont fonctionné après avoir été testées. Le ColorDrop crée une chute de couleur spécifiée. Le SpeedDrop de la vitesse spécifiée et ainsi de suite. Je veux mettre mes gouttes dans une liste une masse les produire dans l'interface graphique. Drop est la super-classe, ColorDrop et SpeedDrop sont des sous-classes qui étendent la super-classe. Le code compile, mais l'interface graphique est vide. Suis-je mal mon arraylist? Ou est-ce que j'appelle incorrectement des méthodes sur des objets de cette liste?Arraylist de type superclasse pour contenir divers types de sous-classes
package advancedobject;
import java.awt.Color;
import java.awt.Graphics2D;
import java.util.ArrayList;
public class MyGooDrop extends Goo {
Drop testDrop;
Drop colorDrop;
Drop fastDrop;
Drop wavyDrop;
int random = (int) Math.random()*width;
ArrayList<Drop> drops;
public MyGooDrop()
{
testDrop = new Drop(width/2, -10, 10);
colorDrop = new ColorDrop(width/3, -10, 10, Color.BLUE);
fastDrop = new SpeedDrop ((width * 3/4), -10, 10, 5);
wavyDrop = new WavyDrop (-10, height/2, 10);
drops = new ArrayList<Drop>();
fillDropList();
}
public void fillDropList()
{
for(int i = 0; i<= 12; i++)
{
if (i <= 4)
drops.add(i, new Drop ((int) Math.random()*width, -10, 10));
else if (i>4 && i<=8)
drops.add(i, new ColorDrop ((int) Math.random()*width, -10, 10, Color.BLUE)); //drops.get(i).randomPainter()
else
drops.add(i, new SpeedDrop ((int) Math.random()*width, -10, 10, (int) Math.random()*10));
}
}
public void draw(Graphics2D g) {
// Fill background
g.setColor(Color.GRAY);
g.fillRect(0, 0, width, height);
testDrop.draw(g);
colorDrop.draw(g);
fastDrop.draw(g);
wavyDrop.draw(g);
for(int i = 0; i<=12; i++)
drops.get(i).draw(g);
}
public void update(){
testDrop.move(width, height);
colorDrop.move(width, height);
fastDrop.move(width, height);
wavyDrop.move(width, height);
for(int i = 0; i<=12; i++)
drops.get(i).move(width, height);
}
public static void main(String[] args) {
MyGooDrop tester = new MyGooDrop();
tester.go();
}
}
Vous n'avez pas besoin de lancer 'Drop' quand vous ajoutez à la liste, puisque tous les éléments que vous ajoutez en héritent – fge
cela ne fonctionne pas sans le cast: \ –
La conversion en' Drop' est complètement inutile. – Yuushi