/**
* @(#)MyGraphi.java
*圓 circle 菱形 diamond 橢圓 ellipse 矩形 rectangle 長方形的 rectangular
*梯形 trapezia 梯形不規則四邊形 trapezium 梯形不等邊四邊形 trapezoid 三角形 triangle
*
* @author
* @version 1.00 2009/11/1
*/
abstract class MyGraghic {
float Square,Girth;
abstract float reSquare(); //抽象方法
abstract float reGirth();
MyGraghic() {
Square=0;
Girth=0;
}
MyGraghic(float s,float g) {
Square=s;
Girth=g;
}
public static void main(String arg[]) {
MyRectangle r = new MyRectangle(6,9);
MyCircle c = new MyCircle(9);
MyTrapezia tp = new MyTrapezia(6,3,5,8,9);
MyTriangle tg = new MyTriangle(2,5,6);
MyDiamond d = new MyDiamond (6,9);
System.out.println("矩形面積:"+r.reSquare());
System.out.println("矩形周長:"+r.reGirth());
System.out.println("圓面積:"+c.reSquare());
System.out.println("圓周:"+c.reGirth());
System.out.println("梯形面積:"+tp.reSquare());
System.out.println("梯形周長:"+tp.reGirth());
System.out.println("三角形面積:"+tg.reSquare());
System.out.println("三角形周長:"+tg.reGirth());
System.out.println("菱形面積:"+d.reSquare());
System.out.println("菱形周長:"+d.reGirth());
}
}
class MyRectangle extends MyGraghic { //矩形
float rectLen,rectWid;
MyRectangle(){
super();
rectLen=0;
rectWid=0;
}
MyRectangle(float len,float wid){
super(len*wid,(len+wid)*2);
rectLen=len;
rectWid=wid;
}
float reSquare(){ //改寫方法返回矩形面積
Square=rectLen*rectWid;
return Square;
}
float reGirth() { //周長
Girth=(rectWid+rectLen)*2;
return Girth;
}
}
class MyCircle extends MyGraghic { //圓
float radio;
MyCircle() {
super();
radio=0;
}
MyCircle(float fr) {
super((float)Math.PI*fr*fr,(float)Math.PI*fr*2);
radio=fr;
}
float reSquare() { //改寫方法返回圓面積
Square=(float)Math.PI*radio*radio;
return Square;
}
float reGirth(){ // 改寫方法,返回圓周
Girth=(float)Math.PI*radio*2;
return Girth;
}
}
class MyTrapezia extends MyGraghic{ //梯形
float high,abLen,undLen,blen,clen;
MyTrapezia (){
super();
high = abLen = undLen = 0;
clen=blen=0;
}
MyTrapezia (float h,float a,float u,float b,float c){
super((a+b)*h/2,a+b+c+u);
high = h;
abLen = a;
undLen = u;
blen=b; clen=c;
}
float reSquare() { //改寫方法返回梯形面積
Square=(abLen+undLen)*high/2;
return Square;
}
float reGirth(){ // 改寫方法,返回梯形周長
Girth=abLen+undLen+blen+clen;
return Girth;
}
}
class MyTriangle extends MyGraghic{ //三角形
float aLen,bLen,cLen; //需要考慮三邊長的關係:還未實現
MyTriangle(){
super();
aLen=bLen=cLen=0;
}
MyTriangle(float a,float b,float c){
super((float)Math.sqrt(((a+b+c)/2)*((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c)),a+b+c);
aLen=a;
bLen=b;
cLen=c;
}
float reSquare() { //改寫方法返回三角形面積
Square=(float)Math.sqrt((aLen + bLen + cLen)/2*((aLen + bLen + cLen)/2-aLen)
*((aLen + bLen + cLen)/2-bLen)*((aLen + bLen + cLen)/2-cLen));
return Square;
}
float reGirth(){ // 改寫方法,返回三角形周長
Girth=aLen + bLen + cLen;
return Girth;
}
}
class MyDiamond extends MyGraghic{ //菱形
float slen,llen;
MyDiamond (){
super();
slen=llen=0;
}
MyDiamond (float l,float s){
super(l*s,2*(float)Math.sqrt(s*s+l*l));
slen=s;
llen=l;
}
float reSquare() { //改寫方法返回三角形面積
Square = slen*llen;
return Square;
}
float reGirth(){ // 改寫方法,返回三角形周長
Girth=2*(float)Math.sqrt(slen*slen+llen*llen);
return Girth;
}
}
/**
** 聲明抽象方法,而因爲子類不是抽象類,所以要改寫抽象方法
super() 指代父類,將類的成員方法定義
MyDiamond()用兩種方式構造方法:有參數和無參數,無參數是對方法成員的初始化。
*/