/* 程式範例: 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();
}
}
留言列表