2017-04-17 1 views
0

Tout d'abord, je suis désolé d'avoir possiblement un titre incorrect, je pense peut-être à quelque chose d'autre mais ici va. J'ai un programme simple qui dessine des étoiles et des cercles dans Java en utilisant l'applet de traitement. J'ai une ArrayList de type Shape. Ensuite, j'ajoute diverses étoiles et cercles à travers un constructeur qui utilise une surcharge pour déterminer s'il s'agit d'une étoile ou d'un cercle.Polymorphisme, surcharge et remplacement en Java avec ArrayList

Pour l'étoile:

shapeList.add(new Shape(x, y, size, colour, numPoints, pApp)); 

Pour le cercle:

shapeList.add(new Shape(x, y, size, colour, pApp)); 

Une fois cela fait, la tâche est en boucle autour de la ArrayList pour dessiner et rendre les formes. La classe des étoiles et des cercles a ses propres méthodes de dessin pour dessiner les formes.

for (Shape shape: shapeList) 
    { 
     shape.update(); 
     shape.draw(); 
    } 

Le problème que je vais avoir, est qu'il ne parvient pas à remplacer le vide tirage au sort() dans la classe de forme quand je le veux à « retomber » dans la classe étoile ou Circle et exécuter ce tirage spécifique() selon que l'objet est une étoile ou un cercle à ce stade dans ArrayList.

Merci!

+1

Mais vous n'instanciez pas 'Star' ou' Circle', vous instanciez 'Shape's ... Vous devez utiliser les constructeurs des classes appropriées. – Zircon

+0

Pour Star, je conseille d'ajouter un Polygon/Polygon2D. Pour Circle, je conseille d'ajouter un Ellipse2D. – ControlAltDel

+0

@Zircon ouais c'était une erreur, merci! – badprogramming99

Répondre

0

Définir une interface de forme

public interface Shape { 

    // the methods circle and star need to implement 
    void update(); 
    void draw(); 
} 

Mettre en place un cercle

public class Circle implements Shape { 


    public Circle(int x, int y, int size, Color colour, App pApp){ 
     // your code 
    } 

    @Override 
    public void draw() { 
     System.out.println("Drawing Circle"); 
    } 

    @Override 
    public void update() { 
     System.out.println("Updating Circle"); 
    } 
} 

Mettre en œuvre une étoile

public class Star implements Shape { 


    public Circle(int x, int y, int size, int numPoints, Color colour, App pApp){ 
     // your code 
    } 

    @Override 
    public void draw() { 
     System.out.println("Drawing Star"); 
    } 
    @Override 
    public void update() { 
     System.out.println("Updating Star"); 
    }  

} 

les ajouter à votre liste

shapeList.add(new Star(x, y, size, colour, numPoints, pApp)); 
shapeList.add(new Circle(x, y, size, colour, pApp)); 
shapeList.add(new Star(x, y, size, colour, numPoints, pApp)); 
shapeList.add(new Circle(x, y, size, colour, pApp)); 

for (Shape shape: shapeList) 
{ 
    shape.update(); 
    shape.draw(); 
}