interface Area{
// 面積を計算する
double getArea();
}
// 図形クラス
abstract class Shape{
abstract void Display();
}
// 円クラス
class Circle extends Shape implements Area{
int x;
int y;
int r;
Circle(int x, int y, int r ){
this.x = x;
this.y = y;
this.r = r;
}
void Display(){
System.out.println("x=" + x + ", y=" + y + ", r=" + r);
}
// 面積を計算する
public double getArea(){
return r*r*Math.PI; // Math.PI:円周率
}
}
// 長方形クラス
class Rect extends Shape implements Area{
int x1;
int y1;
int x2;
int y2;
Rect(int x1, int y1, int x2, int y2 ){
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
void Display(){
System.out.println("x1=" + x1 + ", y1=" + y1 + ", x2=" + y2 + ", y2=" + y2);
}
// 面積を計算する
public double getArea(){
// Math.abs : 絶対値を求めるメソッド
return Math.abs(x1-x2) * Math.abs(y1-y2);
}
}
// 線クラス
class Line extends Shape{
int x1;
int y1;
int x2;
int y2;
Line(int x1, int y1, int x2, int y2 ){
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
void Display(){
System.out.println("x1=" + x1 + ", y1=" + y1 + ", x2=" + y2 + ", y2=" + y2);
}
}
public class Test{
public static void main(String args[]){
Shape array[] = new Shape[5];
array[0] = new Circle(5,3,2);
array[1] = new Rect(5,3,20,7);
array[2] = new Circle(3,1,1);
array[3] = new Line(0,0,3,3);
array[4] = new Circle(-5,2,2);
double area = 0; // 面積の合計
for( int i = 0 ; i < array.length ; i++ ){
// 面積を計算するAreaインターフェースをインプリメントしているか?
if( array[i] instanceof Area )
area += ((Area)array[i]).getArea();
}
System.out.println("面積の合計="+area);
}
}
|