2016-11-08 2 views
0

私がShapeから継承するクラストライアングルやサークルなどのような円と三角形を描くクラスのアプリケーションている:多型シェイプクラスは、最近作成されたシェイプを描画しますか?

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

    } 
} 

コードがエラーなしで円を描くが、描かれた三角形は常に秒1であります(tri2)。私は周りを遊んでいたし、描かれた三角形が常に最後に定義されたものであることに気づいた。なぜこれが事実かもしれないと思っていたのですか?

+2

あなたが 'Shape'クラスまたは' Triangle'クラスを表示していない場合、どのようにして間違ったことを誰かに教えることができますか? (私の推測では、あなたは 'static 'とマークされたフィールドをいくつか持っているはずですが、そうではないはずです)。 –

+0

「描かれた三角形は、常に最後に定義されたものを描画する」とはどういう意味ですか?例えば。あなたが今見ているものと、あなたが期待していたものをいくつか出力していただけますか? – n247s

+0

詳細については不明な点が残念ですが、まだここに質問するのに慣れています。 – Jeni

答えて

0

各シェイプの描画を開始する場所をマークしたクラスごとにxとyの値があり、これらの変数はスーパークラスとサブクラスで静的に定義されていました。これにより、Triangleのxおよびyコンポーネントが最新のオブジェクトで定義されました。

+1

Davidさんの推測が正しいと思われます。 – camickr

関連する問題