2012-03-20 107 views
0

我有這個原始的父級抽象類Geometric,我在Octagon中擴展它,並且還實現了Comparable和Cloneable。 IDK爲什麼我不斷收到上述錯誤。請大家諒解。「必須實現繼承的抽象方法」

class Octagon extends GeometricObject implements Cloneable, Comparable{ 
    private double side; 
    public class Octagon(){ 
    } 
    public class Octagon(double s){ 
    side=s; 
    } 
    public double getArea(){ 
    return (2+4/Math.sqrt(2))*side*side; 
    } 
    public double getPerimeter(){ 
    return 8*side; 
    } 
    public int compareTo(Object o){ 
    if (getArea()>((Octagon)o).getArea()){ 
     return 1; 
    } 
    else if (getArea()<((Octagon)o).getArea()){ 
     return -1; 
    } 
    else 
     return 0; 
    } 
    public Object clone() throws CloneNotSupportedException{ 
    super.clone(); 
    } 
} 

這是我的幾何級

public abstract class GeometricObject{ 
    private String color="white"; 
    private boolean filled; 
    private java.util.Date dateCreated; 

    protected GeometricObject(){ 
    dateCreated=new java.util.Date(); 
    } 

    protected GeometricObject(String color, boolean filled){ 
    dateCreated=new java.util.Date(); 
    this.color=color; 
    this.filled=filled; 
    } 

    public String getColor(){ 
    return color; 
    } 
    public void setColor(String color){ 
    this.color=color; 
    } 
    public boolean isFilled(){ 
    return filled; 
    } 
    public void setFilled(boolean filled){ 
    this.filled=filled; 
    } 
    public java.util.Date getDateCreated(){ 
    return dateCreated; 
    } 
    public String toString() { 
    return "created on "+dateCreated+"\ncolor: "+color; 
    } 
    public abstract double getArea(); 
    public abstract double getPerimeter(); 
} 
+1

最可能的是,你忘了實現你的父類的抽象方法之一'GeometricObject'。 – vidit 2012-03-20 05:00:53

+1

聽起來好像在'GeometricObject'中有一些抽象方法,你不會覆蓋。編譯器應該告訴你,你錯過了哪個方法,哪個應該回答你的問題。 – 2012-03-20 05:00:57

+0

除非您發佈該抽象類的代碼,否則我們不能告訴您爲什麼發生錯誤。 – asgs 2012-03-20 05:01:25

回答

5

得到它 - 錯誤是你「構造」中:

public class Octagon(){ 
//  ^^^^^ <- remove 
} 

public class Octagon(double s){ 
//  ^^^^^ <- remove 
    side=s; 
} 

class「調節劑」是非法的。只需刪除它們。


獎勵建議 - 考慮更改compareTo的實施。你正在看八角形區域,這是比較完美的。但是它需要每次計算面積時需要比較兩個八角形。

由於面積僅取決於side值,它是足夠的和更有效的通過side長度,並比較八角形:

public int compareTo(Object other) { 

if (!(other instanceof Octagon)) { 
    throw new IllegalArgumentException("Comparision with other types is not supported"); 
} 

Integer thisSide = side; // autoboxing, legal conversion since Java 1.5 
Integer otherSide = ((Octagon) other).side;  

// Easy trick: Integer is already comparable ;) 
return thisSide.compareTo(otherSide); 
} 
+0

有趣的 - eclipse報告javac(1.6和1.7)錯誤只是在用非法的'class'「修飾符」在行上丟失了一些'{'和'}'... – 2012-03-20 05:59:22

0

當你寫的「八方延伸GeometricObject」,你基本上是有前途的,你的類可以做的一切,一個GeometricObject可以做的,也許更多。所以如果你沒有實現GeometricObject的一部分的方法,那麼你就違背了這個承諾,Java編譯器反對這個。

+0

如果關於這個問題的評論正確地解釋了你的困惑,那麼我的回答有些不必要...... – mfrankli 2012-03-20 05:02:48

+0

哦,實際上在Geometric對象中只有兩個抽象方法是getArea()和getPerimeter()。編譯器說我必須執行thosse,我認爲我是這麼做的。 – teamaster 2012-03-20 05:04:35

2

我的猜測是GeometricObject是一個抽象類。它可能有一些抽象方法需要在Octogon中實現。

UPDATE

發現了它。我把這兩個類粘貼到Eclipse中,並且繁榮:

public class Octagon(){ 
} 
public class Octagon(double s){ 
    side=s; 
} 

微妙和棘手的錯字。從這兩個構造函數聲明中刪除「class」一詞,並且仍然有一兩個錯誤,但它們應該很明顯。

0

GeometricObject是一個抽象類,並且在您未提供實現的cass GeometricObject(或其中一個超級類)中有abstract方法。

如果某個抽象方法中的某一個抽象方法缺少實現,則無法構造具體類,則會出現編譯錯誤。

0

正如其他人所說,你應該發佈GeometricObject.java的內容作爲明確的答案。

不過,我有個不錯的主意,那就是Comparable。這是適當的Comparable<T>,但你的代碼中有Comparable。試着改變你的代碼class Octagon extends GeometricObject implements Cloneable, Comparable<Object>

相關問題