码迷,mamicode.com
首页 > 编程语言 > 详细

Java中的接口回调

时间:2016-05-11 01:22:28      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

 

接口回调是多态的另一种体现。接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调。不同的类在使用同一接口时,可能具有不同的功能体现。即接口的方法体不必相同,因此接口回调可能产生不同的行为。

接口回调会方便功能的扩展,在主功能外由框架层实现定制功能处理。

 

现在有两个类,一个是A,一个是B,回调就是A去调用B中的某个方法,然后B又回调A中的某个方法,这个方法就是回调方法,回调的机制是与接口分不开的。

也就是A类实现一个接口,并实现接口的方法,B类得到这个回调函数的引用,然后去调用这个对调函数。好像比较绕,举个通俗的例子吧。

 1 //回调接口 
 2 相当于老师的办公室地址
 3 public interface CallBack {    
 4     public void callback(String homework);
 5 }
 6 //老师 作为上层应用身份出现 
 7 public class Teacher implements CallBack{    
 8     @Override
 9     public void callback(String homework) {        
10     System.out.println("老师,这是我的作业..."+homework);    
11     }
12 }
13 
14 //学生 作为下层身份出现
15 public class Student {    //相当于老师的办公室    
16     private CallBack callBack = null;    
17     public  void setCallBack(CallBack callBack) {
18         this.callBack = callBack;
19     }
20     public void doHomework() {
21         System.out.println("写作业...(半个小时后)作业写完了");
22         //告诉老师,作业写完了 并且交到了办公室             
23         callBack.callback("数学卷子一张");
24     }
25 }
26 public class Test {
27     public static void main(String[] args) {
28         Teacher t = new Teacher();
29         Student s = new Student();
30         //传入回调对象 老师
31         s.setCallBack(t);
32         s.doHomework();
33     }
34 }

 

上面就是回调的一个例子。
CallBack是一个回调接口,就是办公室地址,老师是处于上层的,它的学生是不知道也不了解的,
于是老师要想让学生将作业交到办公室,也就得告诉学生办公室的地址,所以老师这个类必须去实现这个回调接口。
在老师的这个类里,也可以去调用学生类的某个方法,当然在这个例子中,并没有去调用学生类中的方法,
而仅仅是实现了回调函数,告诉学生他的作业收到了。

 

接口回调和向上转型:
向上转型: 例如: Shape s=new Circle();
这里创建了一个circle对象,并把得到的引用立即赋值给Shape,通过继承,circle就是一种Shape.
假如调用基类方法(它已在之类中被覆盖) s.draw();由于后期绑定(多态),将会正确调用circle.draw()方法。
java中的跨类引用
在java里面,关于跨类引用 有两条规则应该记住:
1.如果a是类A的一个引用,那么 a可以指向类A的一个实例。或者说指向类A的一个子类。这是向上转型的情况。
2.如果a是接口A的一个引用,那么 a必须指向实现了接口A的一个类的实例,这是接口回调的情形。
在java中向上转型是自动进行的,但是向下转型却需要强制转换。

 

Java中的接口回调

标签:

原文地址:http://www.cnblogs.com/john69-/p/5479915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!