//文件名:ShapeTest.java
interface Shape1//接口
{
void Area();
}
class Circle implements Shape1//实现接口的Circle类
{
public double x,y,r;
public Circle(double x,double y,double r)
{
this.x=x;
this.y=y;
this.r=r;
}
Circle(){
x=0.0;
y=0.0;
r=0.0;
}
public void Area()
{
System.out.println("我是圆形,我的心在:("+x+","+y+"),因为半径有"+r+"那么宽,所以脸有"+3.141592*r*r+"那么大.\n");
}
}
class Square implements Shape1//实现接口的Square类
{
public double x,y,l;
public Square(double x,double y,double l)
{
this.x=x;
this.y=y;
this.l=l;
}
Square()
{
x=0.0;
y=0.0;
l=0.0;
}
public void Area()
{
System.out.println("我是正方形,我的心在:("+(x+l/2)+","+(y+l/2)+"),我的四肢都一样有"+l+"那么长\n为了和四肢协调,所以我的脸有"+l*l+"那么大\n");
}
}
class Triangle implements Shape1
{
public double a,b,c;
Triangle(){
a=0.0;
b=0.0;
c=0.0;
}
public Triangle(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
}
public void Area()
{
System.out.println("我是三角形,我的脸有:"+Math.sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))/4+"那么大\n");
}
}
public class ShapeTest
{
public static void main(String[] args)
{
Shape1[] S=new Shape1[3];//定义并初始化接口数组
S[0]=new Circle(8.0,6.0,4.0);
S[1]=new Square(4.0,3.0,5.0);
S[2]=new Triangle(3.0,4.0,6.0);
System.out.println("都说这是一个看脸吃饭的时代,于是三人就讨论起来了:");
for(int i=0;i<3;i++)
{
S[i].Area();//Area()被Circle、Square、Triangle类实现,故可以调用相应的Area()函数
}
}
}
在上面的例子中,我们首先创建了Shape1这个接口,并在后面利用Circle、Square、Triangle类实现了该接口及其Area()方法,后在main()函数中创建并初始化了接口数组(接口虽不能被实例化,但是可以创建接口数组),并依次指向利用Circle、Square、Triangle实例化的对象,再利用他们去调用各自实现的Area()方法,这样一来,看似都是接口数组S调用了Area()方法,却有不同的表现,即多态性,这就像电脑的USB接口一样,我们插上去的U盘可能是USB2.0的,也有可能是USB3.0的,但又都能通过USB接口和电脑进行通信。这就是接口的作用。
个人理解,如有不当,欢迎大家纠正!