您的位置:程序门 -> java -> j2se / 基础类



关于接口的一点疑惑


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于接口的一点疑惑[已结贴,结贴人:bend01]
发表于:2007-06-19 14:32:42 楼主
比如有个接口inteface   b{
              public   void   save();
}
有两个他的实现bimp1,bimp2

有个类c   用到b.save()的时候,会调用哪个实现类的方法,
如有不妥,请指点,谢谢.
发表于:2007-06-19 14:36:181楼 得分:0
动态调用。。。所谓的多态。。。
发表于:2007-06-19 14:38:042楼 得分:0
如果实例是bimp1,就调用bimp1的save.
发表于:2007-06-19 14:45:283楼 得分:0
能举个例子么,谢谢,感觉有点清楚了
发表于:2007-06-19 14:47:244楼 得分:0
如果实例是bimp1,就调用bimp1的save
但我们定义的时候只是定义了接口
发表于:2007-06-19 14:49:345楼 得分:0
new的时候new的是哪个就调用哪个
发表于:2007-06-19 14:50:466楼 得分:2
这就是多态呀,在执行期判断怎么样绑定的。如果c中实例化的是bimp1   b1=new   bimp1();
那么调用的实质是b1.save();b2   也是一样的   。


发表于:2007-06-19 15:28:157楼 得分:0
接口能实例化么?
发表于:2007-06-19 15:29:378楼 得分:0
如果只用到他的实现方法的实例,那用接口有什么用呢?
发表于:2007-06-19 16:12:389楼 得分:0
接口不能实例化呀..

你要在类中实现接口的内容
发表于:2007-06-19 16:14:3510楼 得分:0
如果只用到他的实现方法的实例,那用接口有什么用呢?
==================
接口的好处在于...一个类可以有多个接口...但只能有一个直接父类
发表于:2007-06-19 16:15:0111楼 得分:0
运行时绑定我只想到继承,
发表于:2007-06-19 16:25:1812楼 得分:5
打个比方说...有个手机基类..它下面继承有..可拍照手机类,音乐手机类,股票手机类等等,
现在我想把拍照手机类中的拍照方法独立出来..同时也可供给照相机基类使用...

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

解决的方法是设定一个拍照的接口,,让照相机基类和拍照手机子类都来实现它..
发表于:2007-06-19 16:49:3613楼 得分:5
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
发表于:2007-06-19 17:16:1614楼 得分:0
谢谢,有点理解了
发表于:2007-06-19 17:19:4315楼 得分:0
如果只用到他的实现方法的实例,那用接口有什么用呢?
==================
接口的好处在于...一个类可以有多个接口...但只能有一个直接父类


一个类可以有多个接口是不是指可以实现多个接口,但只能有一个直接父类
这句不能理解
发表于:2007-06-19 17:27:1116楼 得分:0
你想调哪个就调那个
发表于:2007-06-19 17:30:5217楼 得分:3
对呀..一个类可以实现多个接口的内容

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

这样...手机类就是拍照手机的直接父类...而拍照类则是拍照手机的间接父类
发表于:2007-06-19 21:49:5418楼 得分:2

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

b   b   =   new   bimp2();
b.save();
这样就掉了   bimp2   的save方法了。
发表于:2007-06-19 22:01:2319楼 得分:0
该回复于2007-12-28 11:22:47被管理员或版主删除
发表于:2007-06-20 09:15:3620楼 得分:3
接口变量相当于c++里头的指针一样,java里头的的变量都是引用。
接口引用可以指向任何继承自它的实现类,所以运行时实际调用的是它指向的实例。
a   implements   b
c   implements   b

b   b   =   new   a();//此时b指向a实例
b   =   new   c();//此时b改成指向c实例,a被jvm回收掉。
b.save();//此时调用的就是c实现的操作


快速检索

最新资讯
热门点击