java中接口实现回调,接口回调的例子

发布时间:2022-11-18

本文目录一览:

1、JAVA中 接口是什么? 接口的回调是什么?
2、JAVA接口回调的疑问。
3、请问JAVA中接口中自动回调方法的原理是什么?
4、Java中什么是接口回调?

JAVA中 接口是什么? 接口的回调是什么?

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。

interface People {
    void peopleList();
}
class Student implements People {
    public void peopleList() {
        System.out.println("I'm a student.");
    }
}
class Teacher implements People {
    public void peopleList() {
        System.out.println("I'm a teacher.");
    }
}
public class Example {
    public static void main(String args[]) {
        People a; // 声明接口变量
        a = new Student(); // 实例化,接口变量中存放对象的引用
        a.peopleList(); // 接口回调
        a = new Teacher(); // 实例化,接口变量中存放对象的引用
        a.peopleList(); // 接口回调
    }
}

结果:

I'm a student.
I'm a teacher.

再来看看向上转型(upcasting)的概念。 用 Java 接口实现回调函数的等价功能熟悉 MS-Windows 和 X Window System 事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即“回调”)的函数指针。Java 的面向对象模型目前并不支持方法指针,Java 的接口支持提供了一种获得回调的等价功能的机制。其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法。 假定我们希望在某个事件发生时得到通知。我们可以定义一个接口: InterestingEvent.java

package org.zj.sample;
public interface InterestingEvent {
    public void interestingEvent();
}

这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。 EventNotifier.java

package org.zj.sample;
public class EventNotifier {
    private InterestingEvent ie;
    private boolean somethingHappened;
    public EventNotifier(InterestingEvent event) {
        ie = event; // 保存事件对象以备后用。
        somethingHappened = false; // 还没有要报告的事件。
    }
    public void doWork() {
        if (somethingHappened) { // 检查设置的谓词。
            ie.interestingEvent(); // 通过调用接口的这个方法发出事件信号。
        }
    }
    public void setHappened() { // 设置谓词。
        somethingHappened = true;
    }
}

在上例中,使用 somethingHappened 谓词来跟踪是否应触发事件。希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。 CallMe.java

package org.zj.sample;
public class CallMe implements InterestingEvent {
    @SuppressWarnings("unused")
    private EventNotifier en;
    public CallMe() {
        // 注意 EventNotifier (InterestingEvent event),应该传递一个接口类型。
        // 而下面将this,即实现了InterestingEvent接口的CallMe实例传递给
        // EventNotifier。也就是所谓的接口回调了。
        en = new EventNotifier(this); // 创建事件通知程序,并将自身引用传递给它。
    }
    // 为事件定义实际的处理程序。
}

JAVA接口回调的疑问。

接口是定义方法的,CallBack接口中的 getResult 中定义的需要一个 String 参数(形式参数),在调用的时候也同样提供这样的参数(实际参数,第一个红框)。 回调的流程:第二个图中 main 执行 第13行:当执行 a.loadImage 时,会调用第一个图中的 loadImage 方法,并传递两个参数(一个 url,一个 CallBack 的内部类对象),经过处理之后启动线程。 会执行 run() 方法; 然后调用 callBackCallBack 的内部类对象)中的 getResult 方法, 第14行:getResult 方法执行的是第14行代码,然后往下执行,并输出 --------------------》那个 url

请问JAVA中接口中自动回调方法的原理是什么?

那就是继承,你实现了一个接口就是这个接口的子类了,当然就可以调用了。子类自动继承父类的方法,但是接口的方法是抽象的,你必须要实现,所有可以确保你实现这个接口就必须有这个接口的方法了。而且子类变父类是可以直接用的,所以就可以自动调用了。 最好的方式就是去看下源代码,你就完全明白这种机制了。然后自己可以写个小例子比如:监听 Vector 只要加入了新元素就发个消息的。

Java中什么是接口回调?

可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。 实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。

Java语言特点

Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。 例如,Java不支持 goto 语句,代之以提供 breakcontinue 语句以及异常处理。Java还剔除了C的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。