登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 82|回复: 5

接口对象的实例化在接口回调中的使用方法

[复制链接]

217

主题

217

帖子

1462

安币

手工艺人

发表于 2017-12-6 14:56:13 | 显示全部楼层 |阅读模式

        首先澄清一个问题,就是接口不仅可以声明对象,而且可以把对象实例化!作用见下文。

        接口回调:可以把实现某一接口类创建的对象的引用赋给该接口声明的接口变量,那么该

        接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口

        中的方法时,就是通知相应的对象调用接口方法。

        我们看下面的例子:

[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还有其他方法,bottom仍然可以调用)的,而c++中的函数指针是一对一的。 但是需要注意的是,接口对象的实例化必须用实现它的类来实例化,而不能用接口本身实例化。用接口本身实例化它自己的对象在java中是不允许的。


0

主题

8522

帖子

-2538

安币

限制会员

发表于 2017-12-7 06:07:49 | 显示全部楼层
感谢大神~

6

主题

8577

帖子

-2486

安币

限制会员

发表于 2017-12-7 18:19:14 | 显示全部楼层
感觉楼主很用心,辛苦啦~

20

主题

8259

帖子

-2437

安币

限制会员

发表于 2017-12-8 12:29:18 | 显示全部楼层
感谢大神~

0

主题

1万

帖子

-2479

安币

限制会员

发表于 2017-12-9 10:26:30 | 显示全部楼层
感谢分享,楼主V5~

4

主题

8688

帖子

-2471

安币

限制会员

发表于 2017-12-10 04:25:28 | 显示全部楼层
感谢分享,楼主V5~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表