⑴ 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。
向上转型的概念,用Java接口实现回调函数的等价功能,熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即“回调”)的函数指针。Java的接口支持提供了一种获得回调的等价功能的机制。
定义一个简单接口并在接口中声明我们要调用的方法,例如定义一个接口:
InterestingEvent.javapackage org.zj.sample;
public interface InterestingEvent {
public void interestingEvent ();
}
这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。发出事件信号的类必须等待实现了InterestingEvent接口的对象,并在适当时候调用interestingEvent()方法。
EventNotifier.javapackage 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.javapackage 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); // 创建事件通知程序,并将自身引用传递给它。
}
// 为事件定义实际的处理程序。