Полиморфный класс формы рисует любую форму, недавно созданную?

У меня есть классы треугольник и круг, которые наследуют от формы, и приложение класса, которое рисует круги и треугольники, как так:

public class Application extends JPanel{

@Override
protected void paintComponent(Graphics g){

    super.paintComponent(g);
    Shape[] shapes = new Shape[4];
    Circle circle1 = new Circle(100,100,80);
    Triangle tri1 = new Triangle(20,40,40);
    Circle circle2 = new Circle(300,300,100);
    Triangle tri2 = new Triangle(30,30,30);

    shapes[0] = circle1;
    shapes[1] = tri1;
    shapes[2] = circle2;
    shapes[3] = tri2;

    for(Shape shape : shapes){
        shape = (Shape) shape;
        shape.draw(g, this);
        }

    }
}

Код рисует окружность без ошибок, но треугольник всегда второй( tri2). Я играл вокруг и понял, что треугольник, нарисованный всегда будет тот, который определен последним. Мне было интересно, почему это может быть так?

1 ответ

  1. У меня были значения x и y для каждого класса, которые отмечали, где начать рисовать каждую форму, эти переменные были статически определены для супер-и подклассов. Это привело к тому, что компоненты X и y треугольника были определены с самыми последними объектами.