首先要申明回调的概念不是安卓的,而是java的,所以当你卡在安卓的回调函数理解上的时候,不妨先看完这篇文章,也许会给你一些启示。
在理解回调前,在网上找了很多很多的安卓回调的案例,但是都理解不了,我怀疑我的理解能力有问题,但相信比我聪明的你能够得到你想要的知识。
首先,我们要理解,为什么要用回调?回调有什么好处?回调主要是能给代码解耦,增加代码的重用性,那让我们一起来看看这段代码。
一开始,我把代码全部写在一个名为Test的java文件里,跟回调无关,代码很简单。直接看:
public class Test {
//正常程序流程,第三步要实现的方法不会写,先调出去给别人写
public static void paint(MyPaint f){
System.out.println("第一步");
System.out.println("第二步");
System.out.println("第三步不会写");
f.mypaint(); //这里相当于一个钩子,你main方法里调用哪个类,这里就实现什么方法,调用第一个类就实现第一个类中重写的方法,调用第二个类就实现第二个类中重写的方法,很好的保障了代码的重用性。
System.out.println("第四步");
}
public static void main(String[] args){
paint(new Test1Paint());
paint(new Test2Paint());
}
}
//定义一个接口,在接口里定义一个方法,所有实现这个接口的类都要重写接口中的方法
public interface MyPaint {
public void mypaint();
}
//第一个实现了接口里的方法并重写
class Test1Paint implements MyPaint{
public void mypaint() {
System.out.println("Test---1---Paint的方法");
}
}
//第二个实现了接口里的方法并重写
class Test2Paint implements MyPaint{
public void mypaint() {
System.out.println("Test---2---Paint的方法");
}
}
接下来要完成的是将这些代码解耦:
思路,1、接口与实现接口的类可以放在一个java文件中,2、程序正常流程放在一个java文件中,3、main方法放在一个文件中,因此,我的最终代码是这样:
第一个文件:Test.java
<span style="font-size:14px;">package com.tuzhi.www;
public class Test {
public static void main(String[] args){
TestPaint test=new TestPaint();
test.paint(new Test1Paint());
test.paint(new Test2Paint());
}
}</span>
第二个文件:MyPaint.java
<span style="font-size:14px;">package com.tuzhi.www;
public interface MyPaint {
public void mypaint();
}
class Test1Paint implements MyPaint{
public void mypaint() {
System.out.println("Test---1---Paint的方法");
}
}
class Test2Paint implements MyPaint{
public void mypaint() {
System.out.println("Test---2---Paint的方法");
}
}</span>
第三个文件:TestPaint
<span style="font-size:14px;">package com.tuzhi.www;
public class TestPaint {
public void paint(MyPaint f){
System.out.println("第一步");
System.out.println("第二步");
System.out.println("第三步不会写");
f.mypaint();
System.out.println("第四步");
}
}</span>
当然,我是小白,大家觉得哪里讲得不对的地方,欢迎指正,共同进步!