不管在java中还是android中回调都用的很多,比如自定义listview 下拉刷新,listview这个类并不知道下拉中要去实现什么功能,而只知道当用户下拉要刷新,这不就是接口的作用么,接口只定义外观,具体的实现要子类去实现,这是其一,其二,listview既然不知道下拉刷新的功能是什么,还要等调用他的类去实现,因此就要用到回调,
回调的定义:
用我个人理解的话:就是某个功能,在中间某段并不知道要实现什么,要等外部调用者调用时才知道,而在某个功能中只知道要实现什么功能,但是具体的实现确实在调用类中实现,这就是接口回调,现在用代码来解释更明白
首先定义一个接口,用于回调的
/**
* 用于回调的接口
*/
public interface OnClickListener {
void onClick();
}
在定义一个Button,用于实现某些功能,
public class Button {
private OnClickListener listener;
private MyInterface interfacer;
public void setOnClickListener(final OnClickListener listener) {
this.listener = listener;
}
}
这是模拟android中button的点击事件,
MainClass.java
public class MainClass implements OnClickListener {
public static void main(String[] args) {
System.out.println("this is main");
new MainClass().callBack();
}
public void callBack(){
Button btn = new Button();
btn.setOnClickListener(this);
}
@Override
public void onClick() {
System.out.println("接口回调");
}
}
打印结果:
this is main
接口回调
现在分析回调,
1:首先定义一个接口,用于回调,
2:在要被调用的类中,在这个代码中Button就是要调用的类,在这个类中setOnClickListener()方法并没有实现任何代码,只是调用了接口中的OnClick()方法,相当于声明方法体,并没有具体的实现,而在MainClass类中我们发现OnClick()方法中打印了一句话System.out.println("接口回调");这可以看做是onClick()方法具体的实现,所以说回调的方法是 声明和实现分离的,
3:注册监听器:public void setOnClickListener(OnClickListener listener) ;这个方法就是注册监听器,然后定义变量接受外部传递过来的接口变量,在外部传递过来的是接口的实现类,这里就用到了多态的概念了,
4:在Button类中定义一个方法实现某一逻辑,但是这个逻辑也是某个部分不知道怎么实现,
代码部分改动:
Button.java
public class Button {
private OnClickListener listener;
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
public void move(){
System.out.println("移动前------");
listener.onClick();//比如移动中要处理很多业务
System.out.println("移动后------");
}
}
MainClass.java
public class MainClass implements OnClickListener {
public static void main(String[] args) {
new MainClass().callBack();
}
public void callBack(){
Button btn = new Button();
btn.setOnClickListener(this);
btn.move();
}
@Override
public void onClick() {
System.out.println("移动中................");
}
}
调用类要做的事:
1:new 一个被调用类的对象
2:然后注册监听器
具体的代码提现在:
Button btn = new Button();
btn.setOnClickListener(this);
被调用类还有一种写法:Button.java<pre class="java" name="code">public class Button {
public void setOnClickListener(OnClickListener listener) {
System.out.println("移动前------");
listener.onClick();//比如移动中要处理很多业务
System.out.println("移动后------");
}
}调用者也有一个写法:
public class MainClass {
public static void main(String[] args) {
new MainClass().callBack();
}
public void callBack(){
Button btn = new Button();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick() {
System.out.println("移动中................");
}
});
}
}大家可以对比android中一些view的点击事件来看,就是这样的,理解接口对学设计模块有很大的帮助!希望大家一起好好学习,有什么地方讲的不对,请回复!

3万+

被折叠的 条评论
为什么被折叠?



