在我们的程序设计里面,经常看到的就是程序在执行的过程之中,需要调用外部的函数.来完成的程序的设计和来开发,于是我们把动态需要调用外部程序的这段代码称之为钩子函数,它上面挂的什么方法,我们就执行什么方法.在java里面我们称之为回调机制或称是钩子函数.我们来看看代码.
package test.DrawFrame;
/**
* @author hackbase Java回调方式的实现.钩子函数所执行的方法
*/
public class MyFrame {
public void Dram(){
System.out.println("开始绘制窗口");
}
}
package test.DrawFrame;
/**
* @author hackbase Java之中的回调其本质就是多态的一种使用
* 多态的使用必须满足三个条件1.必须存在继承关系
* 2.重写父类的方法
* 3.父类的引用必须指向子类的对象.
* <p>
* 在这里我们传递进去一个对象的引用 MyFrame f
* 通过引用来实现对方法的调用.
*/
public class DrawMyFrame {
public static void DrawFrame(MyFrame f) {
System.out.println("开始启动线程....");
System.out.println("增加循环....");
System.out.println("查看消息栈...");
//重新绘制窗口...
f.Dram();
System.out.println("启动缓存,增加效率....");
}
public static void main(String[] args) {
DrawFrame(new GrameFrame());
}
}
class GrameFrame extends MyFrame {
@Override
public void Dram() {
System.out.println("GrameFrame.paint()开始绘制窗口....");
System.out.println("窗口绘制完毕.....");
}
}
在我们的主方法里面。我们传递进来的就是一个类的引用。当我们tt哦那个过这个引用f去调用类的方法,当我们传递不同的引用
就会调用不同的类的方法。由于子类都是重写了父类的Draw方法,因此我们可以使用抽象类或者是接口来实现的。下面我们来看看具体的代码实现.
//抽象类来实现的,抽象类的方法都是抽象方法,子类必须重写该方法
*/
public abstract class MyFrame {
public abstract void Dram();
}
还有就是使用接口来实现的。我们来看看下面的代码.
//定义一个接口
interface MyInterface{
public void Draw();
}
package test.DrawFrame;
/**
* @author hackbase Java之中的回调其本质就是多态的一种使用
* 多态的使用必须满足三个条件1.必须存在继承关系
* 2.重写父类的方法
* 3.父类的引用必须指向子类的对象.
* <p>
* 在这里我们传递进去一个对象的引用 MyFrame f
* 通过引用来实现对方法的调用.
*/
public class DrawMyFrame {
//括号的参数为父类的引用
public static void DrawFrame(MyInterface f) {
System.out.println("开始启动线程....");
System.out.println("增加循环....");
System.out.println("查看消息栈...");
//重新绘制窗口...
f.Draw();
System.out.println("启动缓存,增加效率....");
}
public static void main(String[] args) {
//这里要传递相对应的子类的对象
DrawFrame(new GrameFrame02());
}
}
class GrameFrame02 implements MyInterface{
@Override
public void Draw() {
System.out.println("通过接口来实现Java的回调机制的.....");
System.out.println("钩子函数结束调用...");
}
}
当我们父类的引用指向的 是Grame02这个函数的时候。那么那么钩子函数执行的就是它里面的方法.其实就是多态的应用.