public class Main {
    public static void log(Object... o) {
        String s = "";
        for (int i=0; i<o.length; i++) { s += o[i] + " "; }
        System.out.println(s);
    }
    
    public static void main(String[] args) {
        new Main();
    }
    public Main() {
        Shape[] shapes = new Shape[3];
        shapes[0] = new Circle(100, 100, 20);
        Circle c = (Circle)shapes[0];
        c.draw();
        c.move(10, 10.1);
    }
    
    private abstract class Shape {
        private double x = 0, y = 0;
        public Shape(double x, double y) {
            this.x = x;
            this.y = y;
        }
        public double getX() { return x; }
        public double getY() { return y; }
        public abstract void draw();
    }
    private interface Moveable {
        public void move(double x, double y);
    }
     
    private class Circle extends Shape implements Moveable {
        private static final int END = 10;
        private int start = 0;
        private double radius = 0;
        public Circle(double x, double y, double radius) {
            super(x, y);
            this.radius = 0;
        }
        public void draw() {
            log("draw circle");
            log(String.format("center(%.1f, %.1f) - radius(%.1f)", getX(), getY(), radius));
        }
        public void move(double dx, double dy) {
            for (int i=0; i<END; i++) {
                log((i+1) + "");
                log(String.format("center(%.1f, %.1f) - radius(%.1f)", getX()+dx, getY()+dy, radius));
            }            
        }
    }
}