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


Log in to reply