接口對象的實例化在接口回調中的使用

首先澄清一個問題,就是接口不只能夠聲明對象,並且能夠把對象實例化!做用見下文。html

接口回調:能夠把實現某一接口類建立的對象的引用賦給該接口聲明的接口變量,那麼該 
接口變量就能夠調用被類實現的接口中的方法。實際上,當接口變量調用被類實現的接口 
中的方法時,就是通知相應的對象調用接口方法。 
咱們看下面的例子:java

 

interface Computerable{public double area();}
class Rec implements Computerable{
double a,b;
Rec(double a,double b){
this.a = a;
this.b = b;
}
public double area() {
return (a*b);
}
}
class Circle implements Computerable{
double r;
Circle(double r){
this.r = r;
}
public double area() {return (3.14*r*r);} 
}
class Volume {
Computerable bottom;
double h;
Volume(Computerable bottom, double h){
this.bottom = bottom;
this.h = h;
}
public void changeBottome(Computerable bottom){
this.bottom = bottom;
}
public double volume(){
return (this.bottom.area()*h/3.0);
}
}
public class InterfaceRecall {
public static void main(String[] args){
Volume v = null;
Computerable bottom = null;//藉口變量中存放着對對象中實現了該接口的方法的引用
bottom = new Rec(3,6);
System.out.println("矩形的面積是:"+bottom.area());
v = new Volume(bottom, 10);//體積類實例的volum方法實際上計算的是矩形的體積,下同
System.out.println("棱柱的體積是:"+v.volume());
bottom = new Circle(5);
System.out.println("圓的面積是:"+bottom.area());
v.changeBottome(bottom);System.out.println("圓柱的體積是:"+v.volume());
}
}

 

輸出: 
矩形的面積是:18.0 
棱柱的體積是:60.0 
圓的面積是:78.5 
圓柱的體積是:261.6666666666667函數


經過上面的例子,咱們不難看出,接口對象的實例化其實是一個接口對象做爲一個引用 
,指向實現了它方法的那個類中的全部方法,這一點很是象C++中的函數指針,可是倒是有 
區別的。java中的接口對象實例化其實是一對多(若是Computerable還有其餘方法,bo 
ttom仍然能夠調用)的,而C++中的函數指針是一對一的。 
可是須要注意的是,接口對象的實例化必須用實現它的類來實例化,而不能用接口自己實 
例化。用接口自己實例化它本身的對象在Java中是不容許的。this

相關文章
相關標籤/搜索