2014-03-02 30 views
1

我有一個實現媲美,並具有一個抽象類以下內容:比較相同的父抽象類和輸出兩個對象是零

public abstract class Figure implements Comparable{ 

    protected double height ; 

    public abstract double getArea(); 

    public abstract double calculatevolume();//will be used later to compare the volume 

    public int compareTo(Figure o) { 
     return 0; 

    } 
} 

我有圓形和方形爲圖中的孩子,但是當我嘗試與兩個對象的體積相比,它總是返回0!

這在圈內類我compareTo方法:

public int compareTo(Object o) { 

    Figure a = (Figure) o; 

    if (this.calculatevolume() > ((Figure) o).calculatevolume()) 
     return (int)this.calculatevolume(); 
    else if (this.calculatevolume() < ((Figure) o).calculatevolume()) 
     return (int) a.calculatevolume(); 

    else 

    return 0; 
} 
+3

研究原始類型,然後嘗試不再使用它們。 –

回答

0

應該更好地工作,但首先請檢查你的方法calculatevolume天氣的實現可能返回0。

並請提供論據可比接口public abstract class Figure implements Comparable<Figure>

Figure circle = new Circle(); 
Figure square = new Square(); 
circle.compareTo(square); 



public int compareTo(Figure a) { 
     if (this.calculatevolume() > a.calculatevolume()) 
      return (int)this.calculatevolume(); 
     else if (this.calculatevolume() < a.calculatevolume()) 
      return (int) a.calculatevolume(); 
     return 0; 
    } 
+0

你改變了什麼? –

+0

我做了一些改動,在compareTo方法中使用參數,並且爲可比較的接口定義了definig參數,所以a不是必須被轉換的。 – RMachnik

+0

似乎在我的方法問題 現在看來,我有一個問題,我的方法 calculatevolume()返回0,我相信它會覆蓋主之一。 – user2835815

0

您使用的是的原始版本界面這裏

public abstract class Figure implements Comparable{ 

換句話說,你有沒有提供一個類型參數Comparable。因此,它希望聲明的方法爲

public int compareTo(Object o) { 

但你的類是abstract所以也沒有抱怨。您提供的方法

public int compareTo(Figure o) { 

Comparable完全無關。如果你用@Override註解它,你會看到這個。

在你的子類,你提供

public int compareTo(Object o) { 

這是預期方法(重載paren'ts)。但不是你要的那個。

您可能正在使用它作爲

Figure one = ... 
Figure two = ... 

one.compareTo(two); 

由於two聲明的類型是Figure,它將使用父重載實現一個希望將Figure,並始終返回0

一種解決方法是爲Comparable提供適當的類型參數。

public abstract class Figure implements Comparable<Figure>{ 

並從那裏工作。

+0

現在看來,我有一個問題, – user2835815

+0

@ user2835815始終加上'@覆蓋'註釋你認爲你重寫的方法。然後,您可以調查(調試)您的重寫實現返回的內容。 –

+0

現在一切都好了 非常感謝 – user2835815