2016-11-08 2 views
0

Ich habe Klassen Dreieck und Kreis, die von Form besitzen, und eine Klasse Anwendung, die wie so Kreise und Dreiecke zieht:Polymorphe Formklasse zeichnet die zuletzt erstellte Form?

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

    } 
} 

Die ohne Fehler den Kreis ziehen Code, aber die gezogenen Dreieck ist immer der zweite (tri2). Ich spielte herum und erkannte, dass das gezogene Dreieck immer das ist, was zuletzt definiert wurde. Ich habe mich gefragt, warum das der Fall sein könnte?

+2

Wenn Sie uns Ihre 'Shape' Klasse oder Ihre' Dreieck' Klasse nicht zeigen, wie könnte Ihnen irgendjemand sagen, was Sie falsch gemacht haben? (Obwohl ich vermute, dass einige Felder mit 'statisch' markiert sind, sollte das nicht sein). –

+0

Was meinst du mit "das gezeichnete Dreieck wird immer zeichnen, was zuletzt definiert ist"? Z.B. Könnten Sie uns ein Beispiel geben, was Sie gerade sehen und was Sie erwartet haben? – n247s

+0

Sorry für Mangel an Details, die Jungs immer noch daran gewöhnt, Fragen zu stellen .. – Jeni

Antwort

0

Ich hatte Werte x und y für jede Klasse, die markiert, wo zu beginnen, zeichnen jede Form, diese Variablen wurden statisch für die Super-und Unterklassen definiert. Dies führte dazu, dass die x- und y-Komponenten des Dreiecks mit den neuesten Objekten definiert wurden.

+1

Sieht aus wie Davids Vermutung war richtig. – camickr

Verwandte Themen