2016-02-28 39 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