Java的回调机制,或者称之为钩子函数

本文探讨了Java中的回调机制,也称为钩子函数。通过在程序执行过程中调用外部函数来实现功能扩展。示例代码展示了如何通过传递类引用调用不同类的方法,利用子类重写父类的Draw方法实现抽象类或接口的回调。同时,文中还通过接口的使用,解释了多态在回调机制中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我们的程序设计里面,经常看到的就是程序在执行的过程之中,需要调用外部的函数.来完成的程序的设计和来开发,于是我们把动态需要调用外部程序的这段代码称之为钩子函数,它上面挂的什么方法,我们就执行什么方法.在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这个函数的时候。那么那么钩子函数执行的就是它里面的方法.其实就是多态的应用.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值