`
hzy3774
  • 浏览: 985052 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Java的回调函数

 
阅读更多
package com.hu.callback;
 /*一个类Caller中声明接口类型并调用接口的虚函数
  * 而使用该类的类MyCall又实现了该接口,则该类必须实现接口中的虚函数
  * 这样Caller中调用虚函数时也就回调了MyCall中重写的函数fun
  */
 
 public class MyCall implements CallInterface{
     public static void main(String[] args) {
         MyCall mc=new MyCall();
         Caller caller=new Caller(mc);
         caller.call();
     }
 
     @Override
     public void fun() {//这是回调函数
         System.out.println("回调函数");
     }
 }
 
 interface CallInterface{//接口
     public void fun();
 }
 
 class Caller{
     CallInterface ci;//类中声明了一个接口
     public Caller(CallInterface ci){
         this.ci=ci;
     }    
     /*
      * call方法调用ci的虚函数,虚函数没有实现,所以我不知道fun具体内容是什么
      * 但只要谁实现了CallInterface这个接口,他就要重写fun方法
      * 他如果实例化我,我就知道fun的具体内容了,我就可以回调他的fun方法
      */
     public void call(){
         this.ci.fun();
     }
 }

 通常我们是声明一个类的实例,在调用该类的方法,但有时候我们需要反过来在该类中调用拥有该类对象的类的方法。

    实现的功能主要是:MyCall类拥有一个Call的对象,通常情况下在MyCall的成员方法中可以直接调用Caller对象的共有成员方法。

    但是有一种情况下,Caller的对象需要在某时调用MyCall的成员方法,但是对该方法具体要做什么,那是MyCall类需要关心的,如:操作系统检测到按钮按下,需要调用用户的代码做相关处理。操作系统相当于Caller,他只关注什么时候调用哪个方法,不关心要执行什么语句,而用户只需要提供方法的具体代码,而不用去调用,就像用户只需要给复印机提供一摞纸,至于它什么时候去抽取一张纸,用户不需要关心。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics