}
class 堆
{ Computerable 底;
double 高;
堆(Computerable 底,double 高)
{ this.底=底;
this.高=高;
}
void 换底(Computerable 底)
{ this.底=底;
}
public double 求体积()
{ return (底.求面积()*高)/3.0;
}
}
public class E
{ public static void main(String args[])
{ 堆 zui;
Computerable bottom;//声明接口变量
bottom=new 梯形(2.0,7.0,10.7); //回调
System.out.println("梯形的面积"+bottom.求面积());
zui=new 堆(bottom,30);
System.out.println("梯形底的堆的体积"+zui.求体积());
bottom=new 圆形(10);
System.out.println("半径是10的圆的面积"+bottom.求面积());
zui.换底(bottom);
System.out.println("圆形底的堆的体积"+zui.求体积());
}
}
[/code]
上面的例子明白后或者理解了什么时接口回调,再讨论下"接口做参数"的概念
如果准备给一个方法的参数传递一个值,可能希望该方法的参数的类型时都不了类型,这样就可以想该参数传递byte int long float double类型的数据.
如果一个方法的参数时接口类型,就可以将任何实现改接口类的实例传递给该接口参数,那么接口参数就可以回调类实现的接口方法.
比如上面的例子中堆那个类,
复制代码class 堆
{ Computerable 底;//声明接口类型变量
double 高;
堆(Computerable 底,double 高) //方法的参数类型是接口
{ this.底=底;
this.高=高;
}
void 换底(Computerable 底)
{ this.底=底;
}
public double 求体积()
{ return (底.求面积()*高)/3.0;//"底"是接口类型的变量怎么能使用求面积的方法呢,说明了肯定是接口回调,即传进来的参数是一个被对象赋过值的接口变量,才使得此接口变量可以使用被类实现的方法
}
}
如果还是不太明白过程,把下面的程序理解就行了
[code]
interface SpeakHello //接口
{ void speakHello();
}
class Chinese implements SpeakHello//使用接口
{ public void speakHello()
{ System.out.println("中国人习惯问候语:你好,吃饭了吗? ");
}
}
class English implements SpeakHello//使用接口
{ public void speakHello()
{ System.out.println("英国人习惯问候语:你好,天气不错 ");
}
}
class KindHello
{ public void lookHello(SpeakHello hello)//接口做参数
{ hello.speakHello();//被赋值了的接口(回调后的接口)就可以使用被类实现了的方法speakHello();
}