/* 程式範例: Ch6_3.java */
abstract class Shape   // Shape抽象類別宣告
{  // 成員資料
   public double x;   // X座標
   public double y;   // y座標
   // 抽象方法: 計算面積
   abstract void area();
}
class Circle extends Shape  // Circle類別宣告
{  // 成員資料
   private double r;     // 半徑
   // 建構子
   public Circle(double x, double y, double r)
   {  this.x = x;
      this.y = y;
      this.r = r;
   }
   // 成員方法: 實作抽象方法area()
   public void area()
   { System.out.println("圓面積: " + 3.1416*r*r); }
}
class Rectangle extends Shape  // Rectangle類別宣告
{  // 成員資料
   private double x1;     // X座標
   private double y1;     // Y座標
   // 建構子
   public Rectangle(double x, double y,
                    double x1,double y1)
   {  this.x = x;      this.y = y;
      this.x1 = x1;    this.y1 = y1;
   }
   // 成員方法: 實作抽象方法area()
   public void area()
   { System.out.println("長方形面積: "+(y1-y)*(x1-x)); }
}
class Triangle extends Shape  // Triangle類別宣告
{  // 成員資料
   private double x1;     // X座標
   private double y1;     // Y座標
   private double l;      // 三角形底長
   // 建構子
   public Triangle(double x, double y,
                   double x1, double y1, double l)
   {  this.x = x;
      this.y = y;
      this.x1 = x1;
      this.y1 = y1;
      this.l  = l;
   }
   // 成員方法: 實作抽象方法area()
   public void area()
   { System.out.println("三角形面積: "+(y1-y)*l/2.0); }
}
class Ladder extends Shape        //新增
{
 private double x1; private double x2;private double x3; private double x4;
 private double y; private double y1;
 private double h;

 public Ladder(double x1,double x2,double x3, double x4, double y, double y1)
 {
  this.x1=x1;     this.y=y;      this.x3=x3;
  this.x2=x2;     this.y1=y1;    this.x4=x4;
  this.h=h;
 }
 public void area()
 {  h=y-y1;
  System.out.println("梯形形面積: " + h*((x2-x1)+(x4-x3))/2);
 }
}
// 主程式類別
public class Ch6_3
{   // 主程式
    public static void main(String[] args)
    {   // 抽象類別的物件變數
        Shape s;
        // 宣告類別型態的變數, 並且建立物件
        Circle s1 = new Circle(5.0, 10.0, 4.0);
        Rectangle s2 = new Rectangle(10.0, 10.0, 20.0, 20.0);
        Triangle s3 = new Triangle(10.0, 10.0, 5.0, 25.0, 5.0);
        Ladder s4 = new Ladder(10.0, 15.0, 5.0, 25.0, 10.0, 5.0);
        // 呼叫抽象類型物件的抽象方法area()
        s = s1;     // 圓形
        s.area();
        s = s2;     // 長方形
        s.area();
        s= s3;      // 三角形
        s.area();
        s= s4;      // 梯形
        s.area();
    }
}


arrow
arrow
    全站熱搜

    Joy 發表在 痞客邦 留言(0) 人氣()