标签:
首先,说明一下,因为java中没有指针的概念,所以java与c++中回调函数虽然原理差不多,但是实现方法不同。
说实话,如果c++是简单暴力直接的话,java更像一个小姑娘扭扭捏捏,本人也是过了很多次才了解到这个用法。。。。
c++中的简单极了,只要将要调用的函数地址传给函数指针即可,简单明了。如下
#include <iostream> using namespace std; void pig() { cout << "猪在叫叫叫!!" << endl; } void dog(void (*call)()) { call(); } int main() { dog(pig); }
确实很简单,函数pig()将自己的地址传到dog()中,然后通过函数指针调用函数(c++中,函数指针加"()"就等于调用函数指针指向的函数)。
java中就比较蛋疼了,有时候并不是那么明显
这是项目结构,分清楚点,以下是代码
a.java
package javaapplication2; public interface a { public void bark(); }
b.java
package javaapplication2; public class b { private a dog; public b(a dog){ this.dog = dog; dog.bark(); } }
c.java
package javaapplication2; public class c implements a{ @Override public void bark() { System.out.println("哈哈,我很快乐"); } }
zhuhanshu.java
package javaapplication2; public class zhuhanshu { public static void main(String[] args) { b dd = new b(new c()); } }
然后呢,原理很简单。就是b要调用a的一些方法才能实现一些功能,但是呢,可能a的方法已经被想出来了,但是暂时没有实现,于是b根据a中方法的返回值和要传递的参数来使用。等到真正起作用的时候,那就是有人要实现a中方法的时候了。于是,c实现了它的方法。然后在主函数中调用的时候,将c的实例传过去。不明白的话,可以通过IDE的debug功能自己调试调试,很快就会明白。
标签:
原文地址:http://www.cnblogs.com/xushu/p/5487433.html