Java中的接口回调

发表于:2016-5-12 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:半醒半梦半浮尘    来源:51Testing软件测试网采编

  接口回调是多态的另一种体现。接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调。不同的类在使用同一接口时,可能具有不同的功能体现。即接口的方法体不必相同,因此接口回调可能产生不同的行为。
  接口回调会方便功能的扩展,在主功能外由框架层实现定制功能处理。
  现在有两个类,一个是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中向上转型是自动进行的,但是向下转型却需要强制转换。
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • qbu889
    2016-5-18 18:17:17

    非常好

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号