假设有若干 (如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);
 }
}
//测试

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值