public class GravForceC implements DoubleFunMaker {
    protected double saved_m1;
    public GravForceC (double m1) {
        saved_m1 = m1;
    }
    public DoubleFun value(double r) {
        return new HelperClass(saved_m1, r);
    }

    protected class HelperClass
            implements DoubleFun {
        protected double saved_m1, saved_r;
        public HelperClass(double m1, double r) {
            saved_m1 = m1;
            saved_r = r;
        }
        public double value(double m2) {
            if (saved_r == 0.0) {
                return 0.0;
            } else {
                return G * saved_m1 * m2
                    / (saved_r * saved_r);
            }
        }
        private final double G = 6.67E-11;
    }

    public static void main(String argv[]) {
        double massOfEarth = 5.96e24;  // kg
        double radiusOfEarth = 6.37e6; // kg
        DoubleFunMaker earthsForce = new GravForceC(massOfEarth);
        DoubleFun forceAtSurface = earthsForce.value(radiusOfEarth);
        System.out.println("Force of Earth on a liter of coke = "
                           + forceAtSurface.value(1.0));
    }
}
