public abstract class Point { // ADT interface // implementations and private members hidden public double x () { return r () * Math.cos (theta ()); } public double y () { return r () * Math.sin (theta ()); } public double r () { double x = x (); double y = y (); return Math.sqrt (x * x + y * y); } public double theta () { return Math.atan2 (y (), x ()); } public double distance (Point p) { double dx = this.x () - p.x (); double dy = this.y () - p.y (); return Math.sqrt (dx * dx + dy * dy); } public String toString () { return "(" + x () + "," + y () + ")"; } }