// Shape.java - Shape abstract superclass
// Suzanne Balik, 11 Sep 2001
//
// Added compareTo and equals methods based on
// Barron's How to Prepare for the AP Computer Science
// Exam by Roselyn Teukolsky
public abstract class Shape implements Comparable{
private int idNumber;
public Shape(int idNumber) {
this.idNumber = idNumber;
}
public final int getIdNumber() {
return idNumber;
}
public abstract double area();
public abstract String type();
//Implement the compareTo method in the
//Comparable interface
public int compareTo(Object obj) {
//Define a very small range to use to determine
//if the shapes have the "same" area
final double EPSILON = 1.0e-15;
//Cast the Object to a Shape
Shape otherShape = (Shape) obj;
//Calculate the difference between the
//area of "this" Shape and the "other" Shape
double diff = area() - otherShape.area();
if (Math.abs(diff) < EPSILON * Math.abs(area()))
return 0; //Both Shapes have ~same area.
else if (diff < 0) //"this" Shape has a smaller area
return -1; //than the "other" Shape
else //"this" shape has a larger area
return 1; //than the "other" Shape
}
//Override the equals method inherited from the
//Object class
public boolean equals(Object obj) {
//Define a very small range to use to determine
//if the shapes have the "same" area
final double EPSILON = 1.0e-15;
//Cast the Object to a Shape
Shape otherShape = (Shape) obj;
//Calculate the difference between the
//area of "this" Shape and the "other" Shape
double diff = area() - otherShape.area();
if (Math.abs(diff) < EPSILON * Math.abs(area()))
return true; //Both Shapes have ~same area.
else
return false; //The Shapes have different areas.
}
}