abstract class Shape { protected double x; protected double y; Shape(double x, double y) { this.x=x; this.y=y; } void move (double x, double y) { this.x+=x; this.y+=y; } public String toString() { return "x=" + x + ", y=" + y; } double getX() { return x; } double getY() { return y; } abstract double area(); abstract double perimeter(); abstract void scale(double s); } class Point extends Shape { Point(double x,double y) { super(x,y); } double area() { return 0; } double perimeter() { return 0; } void scale(double s) {} public String toString() { return "Point " + super.toString(); } } class Square extends Shape { double l; Square(double x, double y, double l) { super(x,y); this.l=l; } double perimeter() { return l*4; } double area() { return l*l; } void scale(double s) { l *= s; } public String toString() { return "Square length=" + l + " area=" + area() + " peri=" + perimeter() + " " + super.toString(); } } class Circle extends Shape { double r; Circle(double x, double y, double r) { super(x,y); this.r=r; } double perimeter() { return 2 * Math.PI * r; } double circumference() { return perimeter(); } double area() { return Math.PI * r *r; } void scale(double s ) { r *= s; } public String toString() { return "Circle radius=" + r + " area=" + area() + " circumference=" + circumference() + " " + super.toString(); } } class Shapes { public static void main(String [] args) { Square s = new Square(10,10,5); System.out.println(s); s.scale(1.05); System.out.println(s); s.move(3,3); System.out.println(s); } }