public abstract class AbstractShape implements Shape { public abstract double area( ); public abstract double perimeter( ); public int compareTo( Object rhs ) { double diff = area( ) - ((Shape)rhs).area( ); if( diff == 0 ) return 0; else if( diff < 0 ) return -1; else return 1; } public double semiPerimeter( ) { return perimeter( ) / 2; } }