假設有若干 (如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);
 }
}
//測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章