Dynamische Bindung unter Java
-
Guten Tag zusammen,
mein Problem ist im Prizip sehr simpel: Ich überschreibe die Object Methoden:
- .toString()
- .equals(Object obj)Bei der dynamischen Einbindung erkennt der Compiler aber nicht die überschriebene "equals" Methode. Anbei meine voll kompilierbaren Listings.
Danke, Grüße, Kevin
public class Kreis extends Object { private int x,y,radius,x_tmp,y_tmp; public final double PI = 3.14159; public void setRadius(int wert) { radius = wert; } public double getUmfang() { return 2*radius*PI; } public double getFlaeche() { return radius*radius*PI; } // Konstruktor public Kreis(int x, int y, int radius) { this.x = x; this.y = y; this.radius = radius; } public boolean bewege(int deltaX, int deltaY) { x_tmp += deltaX; y_tmp += deltaY; if(x_tmp+radius > 1024 || x_tmp < 0 || y_tmp > 768 || y_tmp < 0) return false; else { x=x_tmp; y=y_tmp; } return true; } public void skaliere(int deltaRadius) { radius += deltaRadius; } // Polymorphe Methoden public String toString() { return "Kreis bei x= "+x+" y= "+y+" Radius: "+radius; } // Polymorphe Methoden public boolean equals(Kreis kreisObj) { if (radius == kreisObj.radius) { System.out.println("Juhuu"); return true; } else { System.out.println("Schade"); return false; } } }
public class KreisTest extends Object { public static void main(String[] args) { Object kreis1 = new Kreis(90,100,50); Object kreis2 = new Kreis(100,90,50); boolean gleicheKreise; // Hier funktioniert die Dynamische Bindung System.out.println("kreis1.toStr: "+kreis1.toString() ); System.out.println("kreis2.toStr: "+kreis2.toString() ); // Hier wird immer noch auf die Klasse Object zugegriffen., FEHLER!!! gleicheKreise=kreis1.equals(kreis2); System.out.println("Gleicher Radius? = " + gleicheKreise); } }
-
Du musst
public boolean equals(Object kreisObj)
überschreiben.
-
Moin,
Du überschreibst ja auch nicht die equals-Methode, sondern legst eine neue an.
Zum Überschreiben musst Du als Parameter den Typ Object nehmen,
der in der Methode selbst dann zum Kreis gecastet wird.Gruß,
Xan
-
Ja, das such ich!!! Wie geht das???
Xandro schrieb:
Moin,
Du überschreibst ja auch nicht die equals-Methode, sondern legst eine neue an.
Zum Überschreiben musst Du als Parameter den Typ Object nehmen,
der in der Methode selbst dann zum Kreis gecastet wird.Gruß,
Xan
-
Moin,
ungefähr so:
public boolean equals(Object o) { if (radius == ((Kreis) o).radius) { System.out.println("Juhuu"); return true; } else { System.out.println("Schade"); return false; } }
Gruß,
Xan
-
ein schönes beispiel warum man so etwas annotieren sollte, dann hätte es dir der compiler gesagt