首頁  >  文章  >  Java  >  Java實作介面回呼叫法的範例解析

Java實作介面回呼叫法的範例解析

黄舟
黄舟原創
2017-09-15 10:11:352418瀏覽

本文的主要內容是同過實際程式碼向大家展示Java程式設計中介面回呼的一般用法,具有一定參考價值,需要的朋友可以了解下

介面回呼是指:可以把使用某一介面的類別所建立的物件的引用賦給該介面宣告的介面變量,那麼該介面變數就可以呼叫被類別實作的介面的方法。實際上,當介面變數呼叫被類別實作的介面中的方法時,就是通知對應的物件呼叫介面的方法,這個過程稱為物件功能的介面回呼。

Java介面回呼一般用法:實作介面實際上和繼承抽象類別類似,只不過繼承是在類別的層面上操作,介面是在方法和常數集合的層面上操作,介面比抽象類別更抽象、更簡潔。可以把實作介面看成繼承特定的一個或多個方法以及一些常數,關於介面的具體規則這裡不贅述。

為什麼要使用介面和抽象類別?因為從很多角度講,這樣做符合物件導向的設計思想,例如開閉原則等。

從實際開發的角度講,Java不支援多重繼承,為了彌補這一點,介面的存在就極為重要,和繼承不同,一個類別可以實作多個介面。

介面的一大作用是實現回調,回調分同步回調和非同步回調,區別是異步回調使用了多執行緒技術,當回調中有耗時操作時,就需要使用非同步回調。

以下全部以非同步回呼為例。以下以java寫法為例,android同理。

1、一般用法

新入口類別Main,並新建介面InterfaceExample


public class Main implements InterfaceExample{
  public static void main(String[] args) {
    System.out.println("------接口使用测试--------");
    InterfaceTest test = new InterfaceTest();
    //调用InterfaceTest的handleThings方法,并传递Main的实例
    test.handleThings(new Main());
    System.out.println("------异步回调测试--------");
  }
  @Override  //重写接口方法
  public void sendMessage(String string) {
    System.out.println("接口回调成功,利用 " + string + " 做一些事");
  }
}
 
//接口也可以写在一个独立的.java文件里
interface InterfaceExample {
  void sendMessage(String string);
}

下面新啟動回呼的類別InterfaceTest


public class InterfaceTest {
  //注意这里Main实例向上转型,接口变量引用了Main实例
  public void handleThings(InterfaceExample example) {
    new Thread(new Runnable() {
      @Override
      public void run() {
        System.out.println("-----做一些事------");
        try {
          Thread.sleep(3000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        //回调接口方法
        example.sendMessage("接口传的参数");
      }
    }).start();
  }
}

最後運作輸出:


------接口使用测试--------
------异步回调测试--------
-----做一些事------
接口回调成功,利用 接口传的参数 做一些事

其中異步的處理也可以在Main呼叫handleThings時進行。

2、結合匿名內部類別實作介面回呼

第二種方法只需要在第一種的基礎上修改Main類別就可以


public class Main {
  public static void main(String[] args) {
    System.out.println("------接口使用测试--------");
    InterfaceTest test = new InterfaceTest();
    //调用InterfaceTest的handleThings方法,并使用实现了InterfaceExample接口的匿名内部类
    //在该匿名内部类中重写接口方法
    test.handleThings(new InterfaceExample() {
      @Override  //重写接口方法
      public void sendMessage(String string) {
        System.out.println("接口回调成功,利用 " + string + " 做一些事");
      }
    });
    System.out.println("------异步回调测试--------");
  }
}
interface InterfaceExample {
  void sendMessage(String string);
}

可以看到,採用匿名內部類別的方式可以簡化程式碼,讓程式結構更清晰。所以這種用法很常見,例如android系統提供的view的點擊事件就是採用這種形式進行回調。

輸出是一樣的:


------接口使用测试--------
------异步回调测试--------
-----做一些事------
接口回调成功,利用 接口传的参数 做一些事。

以上是Java實作介面回呼叫法的範例解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn