关于接口的一点疑惑

bend01 2007-06-19 02:32:42
比如有个接口inteface B{
public void save();
}
有两个他的实现BImp1,BImp2

有个类C 用到B.save()的时候,会调用哪个实现类的方法,
如有不妥,请指点,谢谢.
...全文
701 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzliurc 2007-06-20
  • 打赏
  • 举报
回复
接口变量相当于C++里头的指针一样,Java里头的的变量都是引用。
接口引用可以指向任何继承自它的实现类,所以运行时实际调用的是它指向的实例。
A implements B
C implements B

B b = new A();//此时b指向A实例
b = new C();//此时b改成指向C实例,A被JVM回收掉。
b.save();//此时调用的就是C实现的操作
winthesky 2007-06-19
  • 打赏
  • 举报
回复

B b = new BImp1();
b.save();
这样掉的是 BImp1 的save方法。

B b = new BImp2();
b.save();
这样就掉了 BImp2 的save方法了。
tomkai 2007-06-19
  • 打赏
  • 举报
回复
对呀..一个类可以实现多个接口的内容

直接父类的意思是.
上面那个例子里... 拍照手机 extends 拍照类,手机类....这种继承两个父类的方法是不允许的.....
最多只能分两次继承
手机类 extends 拍照类
拍照手机 extends 手机类

这样...手机类就是拍照手机的直接父类...而拍照类则是拍照手机的间接父类
clarkstil 2007-06-19
  • 打赏
  • 举报
回复
你想调哪个就调那个
bend01 2007-06-19
  • 打赏
  • 举报
回复
如果只用到他的实现方法的实例,那用接口有什么用呢?
==================
接口的好处在于...一个类可以有多个接口...但只能有一个直接父类


一个类可以有多个接口是不是指可以实现多个接口,但只能有一个直接父类
这句不能理解
bend01 2007-06-19
  • 打赏
  • 举报
回复
谢谢,有点理解了
weihthchk 2007-06-19
  • 打赏
  • 举报
回复
C caller1 = new C();
caller1.setB(new BImp1()); //C的B属性是B接口类型
caller1.getB().save(); //调用BImp1的save
C caller2 = new C();
caller1.setB(new BImp2());
caller1.getB().save(); //调用BImp2的save
tomkai 2007-06-19
  • 打赏
  • 举报
回复
打个比方说...有个手机基类..它下面继承有..可拍照手机类,音乐手机类,股票手机类等等,
现在我想把拍照手机类中的拍照方法独立出来..同时也可供给照相机基类使用...

你如何继承呢...拍照手机..不可能继承..手机基类和拍照基类两个类呀

解决的方法是设定一个拍照的接口,,让照相机基类和拍照手机子类都来实现它..
bend01 2007-06-19
  • 打赏
  • 举报
回复
运行时绑定我只想到继承,
tomkai 2007-06-19
  • 打赏
  • 举报
回复
如果只用到他的实现方法的实例,那用接口有什么用呢?
==================
接口的好处在于...一个类可以有多个接口...但只能有一个直接父类
tomkai 2007-06-19
  • 打赏
  • 举报
回复
接口不能实例化呀..

你要在类中实现接口的内容
bend01 2007-06-19
  • 打赏
  • 举报
回复
如果只用到他的实现方法的实例,那用接口有什么用呢?
bend01 2007-06-19
  • 打赏
  • 举报
回复
接口能实例化么?
tdy1234 2007-06-19
  • 打赏
  • 举报
回复
这就是多态呀,在执行期判断怎么样绑定的。如果C中实例化的是BImp1 B1=NEW BImp1();
那么调用的实质是B1.SAVE();B2 也是一样的 。


believefym 2007-06-19
  • 打赏
  • 举报
回复
new的时候new的是哪个就调用哪个
bend01 2007-06-19
  • 打赏
  • 举报
回复
如果实例是BImp1,就调用BImp1的save
但我们定义的时候只是定义了接口
bend01 2007-06-19
  • 打赏
  • 举报
回复
能举个例子么,谢谢,感觉有点清楚了
Avoid 2007-06-19
  • 打赏
  • 举报
回复
如果实例是BImp1,就调用BImp1的save.
Avoid 2007-06-19
  • 打赏
  • 举报
回复
动态调用。。。所谓的多态。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧