2016-02-28 41 views
3

首先,這裏是我的抽象類:擴展抽象類和使用方法使用不同的參數

public abstract class GeometricObject2D implements Comparable { 
    public abstract boolean contains(GeometricObject2D g); 
    public abstract boolean contains(double x, double y); 
    public abstract boolean overlaps(GeometricObject2D g); 
    public abstract int compareTo(Object temp); 
    public abstract double getArea(); 
    public abstract double getPerimeter(); 

} 

我應該把它與其他兩個類,ComparableCircle2D和ComparableRectangle2D延伸。兩者都包含所有的方法,不同的是他們用自己的論點在包含重疊方法,例如:

public class ComparableCircle2D extends GeometricObject2D { 
//... 
    public boolean contains(ComparableCircle2D circle){ 
    //method 
    } 
//... 
    public boolean overlaps(ComparableCircle2D circle){ 
    //method 
    } 
//... 
} 

這是我的錯誤:

錯誤:(1 ,8)java:ComparableCircle2D不是抽象的,也不會覆蓋GeometricObject2D中的抽象方法重疊(GeometricObject2D)。

其他班也一樣。我不完全明白什麼是錯的,所以一個解釋和一個解決方案將不勝感激。

P.S:參數必須保持不變。

+0

當你實現'C時,你應該使用泛型而不是原始類型omparable「,即'implements Comparable '和'compareTo(Geometric2DObject other)'。 –

回答

2

你不能這樣做。

在你的類,你必須重寫抽象類的所有方法,那麼你必須要覆蓋的方法:

@Override 
public boolean contains(GeometricObject2D g){...} 

Hovewer可以使用somenthing這樣的:

public abstract class GeometricObject2D<T extends GeometricObject2D> { 
    public abstract boolean contains(T g); 
} 

而且在你的子類中:

public class ComparableCircle2D extends GeometricObject2D<ComparableCircle2D> { 

    @Override 
    public boolean contains(ComparableCircle2D circle){ 
     // return....; 
    } 
} 
+0

謝謝,這個工作就像一個魅力! – imaginedrragon

1

你的類必須實現/覆蓋抽象類和接口的所有方法,否則你必須將其標記爲abstract

public boolean contains(ComparableCircle2D circle){ 

這不是一個有效超越作爲GeometricObject2D的方法需要GeometricObject2D

1

您必須具有完全相同的參數覆蓋的方法。因此,你擴展了一個減法類,所有的抽象方法都必須實現。

這裏是你

public boolean contains(GeometricObject2D circle){ 
    if (!(circle instanceof ComparableCircle2D)) { 
     throw InputMismatchException(); 
    } else { 
    // method 
    } 
} 

或(取決於你自己的代碼邏輯)溶液

public boolean contains(GeometricObject2D circle){ 
    if (!(circle instanceof ComparableCircle2D)) { 
     return false; 
    } else { 
    // method 
    } 
} 
2

這是仿製藥究竟對,請執行以下操作:

abstract class GeometricObject2D<T extends GeometricObject2D> { 
    public abstract boolean contains(T g); 
} 

class ComparableCircle2D extends GeometricObject2D<ComparableCircle2D> { 
    public boolean contains(ComparableCircle2D circle){ 
     return true; 
    } 
} 
+0

您的解決方案與gabriele的解決方案相同,但我不能選擇兩個答案,否則我會這麼做:/非常感謝您! – imaginedrragon