Java的回调

Java的回调解释

假设有两个类,分别是A和B,在A中有一个方法a(),B中有一个方法b();在A里面调用B中的方法b(),而方法b()中又调用了A类中的方法

同步回调

以小明和小王去吃饭,小王要换衣服才能去吃饭为例

吃饭的接口

public interface EatRice {
   public void eat(String food);
}

A类

public class XiaoMing implements EatRice{//要继承EatRice
	
   //小明和小王一起去吃饭
   public void eatFood() {
	XiaoWang xw = new XiaoWang();
	//A中a()调用B的b()方法
	xw.washFace("吃黄焖鸡", this);//this指的是小明这个类实现的EatRice接口
   }
 
   @Override
   public void eat(String food) {
	System.out.println("小明和小王去"+food)
   }
}

B类

public class XiaoWang{
   public void washFace(String food,EatRice er) {
	System.out.println("小王要换衣服")
        //B调用了A的方法
	er.eat(food);
   }
}

打印结果

小王要换衣服
小明和小王去吃黄焖鸡

异步回调

还以小明和小王去吃饭为例不过在小王换衣服时小明同时在玩手机
其他类都不变B类修改一下

public class XiaoWang{
	
   protected EatRice er;
	
   public void setEatRiceListener(EatRice er, String food) {
	this.er = er;
	washFace(food);
   }
	
   public void washFace(String food) {
		
	System.out.print("小王要换衣服");
		
	new Thread(new Runnable() {
			
		@Override
		public void run() {
			try {
			    //小王换衣服是小明在玩手机,开启线程同步
			    play();
			    Thread.sleep(5000);
			    System.out.print("5秒后小王换完衣服")
			    //B调用A的方法
			    er.eat(food);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
		                e.printStackTrace();
			}
		}
	}).start();
   }
	
   //小明玩手机
   public void play() {
	System.out.println(" 小明在玩手机");
   }
}

打印结果

小王要换衣服小明在玩手机
5秒后小王换完衣服小明和小王去吃黄焖鸡

猜你喜欢

转载自blog.csdn.net/DingKG/article/details/85602396