2016年11月27日 星期日

利用父類別變數存取子類別成員的練習

/* hw10_11,利用父類別變數存取子類別成員的練習 (a)試定義一個圓形類別CCircle,它繼承自CShape類別,並改寫了父類別的area() method,可用來傳回圓形物件的面積。 (b)試定義一個正方形類別CSquare,它也繼承自CShape類別,同時改寫了父類別的area() method,可用來傳回正方形物件的面積。 (c)試定義一個三角形類別CTriangle,它也繼承自CShape類別,同時改寫了父類別的area() method,可用來傳回三角形物件的面積。 (d)試利用 (a)~(c) 所定義的類別,建立圓形、正方形與三角形物件各一個,其中所有的引數(如半徑、邊長或三角形的底和高等)請自行設定。 (e)試撰寫一個largest() method,可用來找出 (d) 中的所有物件裡,面積的最大值。 */ class CShapehw10_11 //父類別Cshape10_11 { public double area() { return 0.0; }


//比較三個面積的大小,因為CShapehw10_11 s[]陣列是在static類別裡宣告
//所以void前面必須加static
public static void largest(CShapehw10_11 s[])
{ double max=0.0; for(int i=0;i<s.length;i++){ if(s[i].area()>max){ //s[i].area()==>呼叫出每個陣列的面積
max=s[i].area(); }
} System.out.println("面積最大的是"+max); }
}


class CCirclehw10_11 extends CShapehw10_11 //子類別 CCirclehw10_11 { private double pi; private double radius;
public CCirclehw10_11(double p ,double r){ /子類別CCirclehw10_11建構元
pi=p; radius=r; }

public double area(){ return pi*radius*radius; //傳回圓面積
}
}


class CSquarehw10_11 extends CShapehw10_11 //子類別 CSquarehw10_11 { private double length; private double width; public CSquarehw10_11(double l ,double w){//子類別CSquarehw10_11建構元 length=l; width=w; }

public double area(){ return length*width; //傳回正方形面積 } }



class CTrianglehw10_11 extends CShapehw10_11 //子類別CTrianglehw10_11 { private double base=4.0; private double height=10.0; public CTrianglehw10_11(double b ,double h){ //子類別CTrianglehw10_11建構元
base=b; height=h; }


public double area() { return (base*height)/2; //傳回三角形面積 } }

public class hw10_11 { public static void main(String args[]){ //CCirclehw10_11 cir=new CCirclehw10_11(3.0,4.0); //cir.area(); //CSquarehw10_11 cqr=new CSquarehw10_11(5.0,6.0); /cqr.area(); //CTrianglehw10_11 ctr=new CTrianglehw10_11(7.0,8.0); //ctr.area();

//透過父類別變數存取子類別物件的成員 CShapehw10_11 shp[]=new CShapehw10_11[3];


//傳值到CCirclehw10_11(double p ,double r)建構元,並將回傳面積儲存在shp[0] shp[0]=new CCirclehw10_11(3.0, 4.0);
System.out.println("圓形面積="+shp[0].area());


//傳值到CSquarehw10_11(double l ,double w)建構元,並將回傳面積儲存在shp[1]
shp[1]=new CSquarehw10_11(5.0,6.0);
System.out.println("正方形面積="+shp[1].area());

//傳值到CTrianglehw10_11(double b ,double h)建構元,並將回傳面積儲存在shp[2] shp[2]=new CTrianglehw10_11(7.0,8.0);
System.out.println("三角形面積="+shp[2].area()); CShapehw10_11.largest(shp);//將陣列傳遞到largest()函數內比較大小
} }

沒有留言:

張貼留言