#### 1. 定义接口 shape

n 声明方法 area ()。

#### 2. 定义 Point 类

n 声明 Point 类，并且实现接口 shape。

n 声明属性 x，y

n 定义构造方法 Point (double x, double y)

n 实现接口方法 area（）

n 定义方法 getX（）

n 定义方法 getY（）

#### 3. 定义 Circle 类

n 声明 Circle 类，扩展 Point 类，并且实现接口 shape。

n 声明属性 radius

n 声明构造方法 Circle (double x, double y, double radius)

n 实现接口方法 area（）

n 定义方法 getradius（）

#### 4. 定义 Square 类

n 声明 Square 类，并且实现接口 shape。

n 声明属性 length

n 定义构造方法 square(double length)

n 实现接口方法 area（）

n 定义方法 getLength（）

#### 5. 定义 Shapes 类

n 为 Shapes 类添加 main（）

n 在 main()方法中创建一个接口 shape 的数组，并把类 Point、Circle、Square 等实例放入数组。

n 注意：实现了接口的类也可以向上类型转换为接口类型。

对数组中的每个实例对象，利用 instanceof 操作符进行类型判断，然后执行相应的操作。

//shapes.java

//用来说明如何通过接口实现多态性。

interface Shape

{

double area ();

}

class Point implements Shape

{

private double x, y;

Point (double x, double y)

{

this.x = x;

this.y = y;

}

double getX ()

{

return x;

}

double getY ()

{

return y;

}

public double area ()

{

return 0.0;

}

}

class Circle extends Point implements Shape

{

private double radius;

Circle (double x, double y, double radius)

{

super (x, y);

this.radius = radius;

}

double getRadius ()

{

return radius;

}

public double area ()

{

return Math.PI * radius * radius;

}

}

class Square implements Shape

{

private double length;

Square (double length)

{

this.length = length;

}

double getLength ()

{

return length;

}

public double area ()

{

return length * length;

}

}

class Shapes

{

public static void main (String [] args)

{

Shape [] shapes =

{

new Circle (52.5, 32.6, 4.7),

new Square (10.0),

new Point (4.5, 5.5)

};

for (int i = 0; i < shapes.length; i++)

{

System.out.println ("Area = " + shapes [i].area ());

if (shapes [i] instanceof Point)

{

double x = ((Point) shapes [i]).getX ();

double y = ((Point) shapes [i]).getY ();

System.out.println ("Point: (x = " + x + ", y = " + y

+ ")");

}

else

if (shapes [i] instanceof Circle)

{

double x = ((Circle) shapes [i]).getX ();

double y = ((Circle) shapes [i]).getY ();

double r = ((Circle) shapes [i]).getRadius ();

System.out.println ("Circle: (x = " + x + ", y = " + y

+ ", r = " + r + ")");

}

else

if (shapes [i] instanceof Square)

{

double l = ((Square) shapes [i]).getLength ();

System.out.println ("Square: (length = " + l + ")");

}

}

}

}