Java接口回调

来源:互联网 发布:淘宝dsr是什么意思 编辑:程序博客网 时间:2024/06/03 07:10

java中接口是不可以直接创建实例的,如果把一个接口声明为一个变量,那么执行这个接口中的方法,接口没有实例是行不通的。但是java的“多态”给了我们契机,在调用这个方法的时候JVM会自动去找其子类,也就是调用其子类中实现的该方法,这是接口回调的本质。所以说,只需要给该变量指向其子类的地址就可以在调用的时候知道调用子类的方法。
举个例子,那么我们就可以在Test类中创建接口CallBackInterface的子类实例,在Call类中声明接口的变量,在Test类中传实现类的地址给Call类,在Call类中接口变量执行接口中的方法的时候就会调用Test类中实现类的该实现方法,这就是接口回调的执行步骤。
下面直接上代码:

//创建一个接口public interface CallBackInterface {    public void result(String string);}
public class Call {    private CallBackInterface callBackInterface;    public Call(CallBackInterface callBackInterface){        //这里是关键,把外部的接口实例引用到该类,给变量赋值          this.callBackInterface = callBackInterface;        //创建实例的时候执行输出          getConsole();     }    public void getConsole(){        callBackInterface.result("Call里面传的参数");    }}
//创建一个实现类public class CallBackInterfaceImpl implements CallBackInterface {    @Override    public void result(String string) {        System.out.println("这是实现类:"+string);    }}
public class Test {    public static void main(String[] args) {        //从接口回调得到数据,传匿名内部类的方式        new Call(new CallBackInterface() {            @Override            public void result(String string) {                System.out.println("接口回调得到的数据:"+string);            }        });        //从接口回调得到数据,传实现类的方式        new Call(new CallBackInterfaceImpl());    }}

打印输出:这里写图片描述

总结:把java多态性体现得淋漓尽致啊有木有!!好灵活!!!

0 0