⑴ 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); // 創建事件通知程序,並將自身引用傳遞給它。
}
// 為事件定義實際的處理程序。