比较两个对象,java

比较两个对象,java,java,Java,我有两个类,一个是Circle(),另一个是GeometricObject()。我必须将GeometricObject扩展到圆形,然后在GeometricObject中实现Compariable。当我这样做时,我在Circle()类中得到一个错误,它说不能重写抽象方法,Circle()不是抽象的。我还必须在测试/主类中比较这两个方面,有人知道我如何修复错误并比较这两个方面吗?提前谢谢 package chapter_14; public class Circle extends Geometr

我有两个类,一个是Circle(),另一个是GeometricObject()。我必须将GeometricObject扩展到圆形,然后在GeometricObject中实现Compariable。当我这样做时,我在Circle()类中得到一个错误,它说不能重写抽象方法,Circle()不是抽象的。我还必须在测试/主类中比较这两个方面,有人知道我如何修复错误并比较这两个方面吗?提前谢谢

package chapter_14;

public class Circle extends GeometricObject{ //here is where i get an error
    private double radius;

  public Circle() {
  }

  public Circle(double radius) {
    this.radius = radius;
  }

  /** Return radius */
  public double getRadius() {
    return radius;
  }

  /** Set a new radius */
  public void setRadius(double radius) {
    this.radius = radius;
  }

  /** Return area */
    @Override
  public double getArea() {
    return radius * radius * Math.PI;
  }

  /** Return diameter */
  public double getDiameter() {
    return 2 * radius;
  }

  /** Return perimeter */
    @Override
  public double getPerimeter() {
    return 2 * radius * Math.PI;
  }

  /* Print the circle info */
  public void printCircle() {
    System.out.println("The circle is created " + getDateCreated() +
      " and the radius is " + radius);
  }

}
几何对象类:


您不会重写这两个方法,因为来自超类的方法是抽象的。因此,您必须实现它们,而不是重写它们(带有“cannotoverride abstract method”的coresponds)

您还需要在圆圈中提供此方法

@Override
public int compareTo(Object o) {
    // TODO Auto-generated method stub
    return 0;
}
GeometricObject不需要实现此方法,因为类是抽象的。但Circle不是,因此必须实现所有方法(此方法具有可比性;与“Circle()不是抽象的”对应)


您不能将GeometricObject与圆进行比较,因为GeometricObject是抽象的,这意味着您不能创建此类的实例。

您不能重写这两个方法,因为来自超类的方法是抽象的。因此,您必须实现它们,而不是重写它们(带有“cannotoverride abstract method”的coresponds)

您还需要在圆圈中提供此方法

@Override
public int compareTo(Object o) {
    // TODO Auto-generated method stub
    return 0;
}
GeometricObject不需要实现此方法,因为类是抽象的。但Circle不是,因此必须实现所有方法(此方法具有可比性;与“Circle()不是抽象的”对应)


您不能将GeometricObject与圆进行比较,因为GeometricObject是抽象的,这意味着您不能创建此类的实例。

问题在于
GeometricObject
被声明为实现
Comparable

public abstract class GeometricObject implements Comparable {
这意味着任何具体的子类都必须实现
compareTo
方法,例如:

@Override public int compareTo(Object o) {
    Circle circle = (Circle) o;
    return Double.compare(getArea(), circle.getArea());
}

有了这个更改,它在JDK 7中为我编译。

问题是
GeometricObject
被声明为实现
Comparable

public abstract class GeometricObject implements Comparable {
这意味着任何具体的子类都必须实现
compareTo
方法,例如:

@Override public int compareTo(Object o) {
    Circle circle = (Circle) o;
    return Double.compare(getArea(), circle.getArea());
}

通过该更改,它可以在JDK 7中为我编译。

这是因为您的
ComparableObject
类实现了
Comparable
接口,该接口具有:

int compareTo(Object o)

必须在非抽象类中实现所有抽象方法。在这种情况下,在从ComparableObject派生的每个类中,您必须添加实现
comparTo
,因为这是一种抽象方法。

这是因为您的
ComparableObject
类实现了
Comparable
接口,该接口具有:

int compareTo(Object o)

必须在非抽象类中实现所有抽象方法。在这种情况下,在从ComparableObject派生的每个类中,都必须添加实现
compareTo
,因为这是抽象方法。

我明白了,所以子类也必须继承compareTo方法。这就解决了问题,现在我只需要找出测试部分。非常感谢您的帮助。@Jason:它必须实现
Comparable
中声明的
compareTo
方法,因为
GeometricObject
不这样做。我明白了,子类也必须继承compareTo方法。这就解决了问题,现在我只需要找出测试部分。非常感谢您的帮助。@Jason:它必须实现
Comparable
中声明的
compareTo
方法,因为
GeometricObject
不这样做。