public Rectangle(double value) {
       this(value, value);
    }
    public Rectangle(double length, double width) {
       this.length = length;
       this.width = width;
    }
    @Override
    public String toString() {
       return "My real Class is:" + Rectangle.class.getName()
              + "\nMy length is:" + length + "\nMy width is:" + width
              + "\nMy area is:" + area() + "\nMy perimeter is:" + perimeter();
    }
    @Override
    public double area() {
       return length * width;
    }
    @Override
    public double perimeter() {
       return 2 * (length + width);
    }
    @Override
    public void draw() {
       Logger logger = Logger.getLogger("INFO");
       logger.info("draw()");
       System.out.println(message());
    }
    public double getLength() {
       return length;
    }
    public void setLength(double length) {
       this.length = length;
    }
    public double getWidth() {
       return width;
    }
    public void setWidth(double width) {
       this.width = width;
    }
}
package fox.math.kmust;
/**
 * @file Test.java
 */
public final class Test {
    public static void main(String[] args) {
       Shape shape = null;
       shape = new Circle();
       getShapeData(shape);
       if (Graph.class.isInstance(shape)) {
           drawGraph((Graph) shape);
       }
       System.out.println("-----The Line For Fox" + "-----TLFF-----"
              + "The Line For Fox-----");
       shape = new Rectangle(3.0);
       getShapeData(shape);
       if (Graph.class.isInstance(shape)) {
           drawGraph((Graph) shape);
       }
    }
    private static void getShapeData(Shape shape) {
       System.out.println("area:" + shape.area());
       System.out.println("perimeter:" + shape.perimeter());
    }
    private static void drawGraph(Graph graph) {
       graph.draw();
    }
}