使用ArrayList在Java中进行多态,重载和覆盖

时间:2017-04-17 15:10:13

标签: java arraylist polymorphism processing

首先,我很抱歉可能有一个不正确的标题,我可能会想到别的东西但是这里有。我有一个简单的程序,使用Processing小程序在Java中绘制星形和圆形。我有一个Shape类型的ArrayList。

ArrayList<Shape> shapeList= new ArrayList<Shape>();

然后我通过构造函数添加各种星形和圆形,该构造函数使用重载来确定它是星形还是圆形。

对于明星:

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

对于圈子:

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

完成后,任务是循环ArrayList以绘制和渲染形状。星形和圆形类都有自己的绘制方法来绘制形状。

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

我遇到的问题是,当我希望它退回时,它无法覆盖Shape类中的空draw()。进入Star或Circle类并执行特定的draw(),具体取决于对象是ArrayList中该点的星形还是圆形。

谢谢!

1 个答案:

答案 0 :(得分:0)

定义Shape接口

public interface Shape {

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

实施圈子

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");
    }
}

实施明星

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");
    }       

}

将它们添加到您的列表中

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();
}