Java回调

回调是Java非常经典的用法,体现了Java的多态和动态绑定,回调指的是 接口的回调(有很多概念被学过的人简化的称呼,给初学者带来困惑,真是伤不起)。

网上关于回调的文章一大推,说法也很多,比如:

A对象调用了自己的方法a,方法a接收的参数是B接口的实例b,而在方法a中将执行接口B中的方法c。

对于初学者来说,理解起来非常困难,学习的乐趣也没了。

在这先举个简单的例子(参考了知乎某位朋友的例子,想到好例子好难),大家看完例子再来理解就好了。

背景:在学校旁边有家奶茶店,里面有个服务员Lucy,奶茶店有奶茶、白开水、碧螺春等饮料提供。经常光顾奶茶店的有三类人,学生,老师还有在学校打工的工人。

学生最喜欢和奶茶,老师喜欢和碧螺春,工人因为比较累,喜欢和白开水,虽然喜好不同,但他们三种人去奶茶店都是去实现自己的需要的服务的。

于是coding如下代码:

interface NeedService{
     public void server();
}

class Student implements NeedService{
      @Override
      public void server() {
           System. out.println( "招待我喝奶茶" );
     }
}

class Teacher implements NeedService{
      @Override
      public void server() {
           System. out.println( "招待我喝碧螺春" );
     }
}

class Worker implements NeedService{
      @Override
      public void server() {
           System. out.println( "招待我喝白开水" );
     }
}

服务员Lucy虽然比较漂亮,但是也比较笨,虽然她知道三种人都需要服务,但是她得等三种人说出自己的需求才知道给三种人上什么饮料。

抽象到代码就是服务员只能传入需要服务的接口 NeedService( 就是在这里,接口回调 ) ,再调用 NeedService server() 方法,她能做的就是这个。

public class Waiter {
     
      //此处回调接口
      void provideService(NeedService needService){
           needService.server();
     }

}

这时候回调就派上用场了,只要三种人实现了各自的server()方法( 重写 ),就可以完美的解决这个问题了。

于是coding如下代码:

public class Waiter {
     
     //此处回调接口
     void provideService(NeedService needService){
           needService.server();
     }
     
     public static void main(String[] args) {
            // TODO Auto-generated method stub
           Waiter waiterLucy = new Waiter();
           waiterLucy.provideService( new Student());
           waiterLucy.provideService( new Teacher());
           waiterLucy.provideService( new Worker());
           
     }

}

结果:



最后,分析下接口的写法,必须有重写和接口才能实现,看懂了这个例子,网上的概念看不看就无所谓了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值