假设有若干 (如10)个Circle,Rectangle和Square形状,计算它们的总面积。
package OctoberTwentyfour;
abstract class Shape{
protected String type;
protected double area, perim;
public abstract void computeArea();
public String toString()
{ return type + ":\n\tArea = " + area + "\n\tPerimeter = " + perim;
}
}//父类
package OctoberTwentyfour;
class Rectangle extends Shape{
protected double width, height;
public Rectangle(double _width, double _height)
{ type = "Rectangle";
width = _width;
height = _height;
}
public void computeArea()
{ area = width * height; }
public void computePerimeter()
{ perim = 2*width + 2*height; }
public String toString()
{ return super.toString() + "\n\tWidth = " + width + "\n\tHeight = " + height;
}
}//矩形子类
package OctoberTwentyfour;
class Circle extends Shape
{ protected double radius;
public Circle(double _radius)
{ type = "Circle";
radius = _radius;
}
public void computeArea()
{ area = Math.PI * radius * radius; }
public void computePerimeter()
{ perim = 2.0 * Math.PI * radius; }
public String toString()
{ return super.toString() +"\n\tRadius = " + radius;
}
}
//圆子类
package OctoberTwentyfour;
class Square extends Rectangle
{ public Square(double _side)
{ super(_side, _side);//重写父类方法super
type = "Square";
}
}
//继承于矩形的正方形子类
package OctoberTwentyfour;
public class ShapeTest
{ public static void main(String args[])
{ Shape shapes[] = new Shape[10];
double total_area=0.0;
int k=0;
for (int i=0; i<shapes.length; i++ ){
k=(int)Math.ceil(Math.random()*3);
System.out.println("k is :"+k);
switch (k) {
case 1: shapes[i]=new Circle(Math.random()*10);
break;
case 2: shapes[i]=new Rectangle(Math.random()*10, Math.random()*10);
break;
case 3: shapes[i]=new Square(Math.random()*10);
break;
}
}
for (int i = 0; i < shapes.length; i++) {
shapes[i].computeArea();
total_area+=shapes[i].area;
}
System.out.println("Total area is :"+total_area);
}
}
//测试