1

I have two classes, one Circle() and the other GeometricObject(). I have to extend GeometricObject to circle then implement comparable in GeometricObject. When i do so i get an error in my Circle() class that says cannot override abstract method and Circle() is not abstract. I also have to compare the two in a test/main class, anyone have any ideas as to how i can fix the error and compare the two? Thanks in advance.

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); } } 

GeometricObject Class:

package chapter_14; public abstract class GeometricObject implements Comparable{ private String color = "white"; private boolean filled; private java.util.Date dateCreated; /** Construct a default geometric object */ protected GeometricObject() { dateCreated = new java.util.Date(); } /** Return color */ public String getColor() { return color; } /** Set a new color */ public void setColor(String color) { this.color = color; } /** Return filled. Since filled is boolean, * so, the get method name is isFilled */ public boolean isFilled() { return filled; } /** Set a new filled */ public void setFilled(boolean filled) { this.filled = filled; } /** Get dateCreated */ public java.util.Date getDateCreated() { return dateCreated; } /** Return a string representation of this object */ @Override public String toString() { return "created on " + dateCreated + "\ncolor: " + color + " and filled: " + filled; } /** Abstract method getArea */ public abstract double getArea(); /** Abstract method getPerimeter */ public abstract double getPerimeter(); } 

3 Answers 3

5

The problem is that GeometricObject is declared to implement Comparable:

public abstract class GeometricObject implements Comparable { 

That means any concrete subclass has to implement the compareTo method, for example:

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

With that change, it compiles for me in JDK 7.

Sign up to request clarification or add additional context in comments.

2 Comments

I see so the subclass also has to inherit the compareTo method. That fixed it, now i just have to figure out the testing part. Thank you so much for the help.
@Jason: It has to implement the compareTo method declared in Comparable, because GeometricObject doesn't do so.
3

You don't override the two methods because the method from superclass are abstract. Therefore you have to implement them and not override them (coresponds with "cannot override abstract method").

You also nee to provide this method in Circle.

@Override public int compareTo(Object o) { // TODO Auto-generated method stub return 0; } 

GeometricObject doesn't need to implement this method because the class is abstract. But Circle is not and therefore has to implement all methods (Comparable forces this method; coresponds with "Circle() is not abstract").

You can't compare GeometricObject with a Circle because GeometricObject is abstract which mean you can't creates instances of this class.

Comments

3

This is because your ComparableObject class implements Comparable interface which has:

int compareTo(Object o) 

You must implement all abstract methods in non-abstract class. In this case, in every classes derived from ComparableObject you have to add implementation comparTo, because this is abstract method.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.