1. 程式人生 > >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的點選事件就是採用這種形式進行回撥。


輸出是一樣的:

------介面使用測試--------
------非同步回撥測試--------
-----做一些事------
介面回撥成功,利用 介面傳的引數 做一些事





2017/3/22

相關推薦

Java介面一般用法

實現介面實際上和繼承抽象類類似,只不過繼承是在類的層面上操作,介面是在方法和常量集合的層面上操作,介面比抽象類更抽象、更簡潔。可以把實現介面看成繼承特定的一個或多個方法以及一些常量,關於介面的具體規則這裡不贅述。 為什麼要使用介面和抽象類?因為從很多角度講,這

Java介面詳解

一.產生介面回撥的場景 在現實生活中,產生介面回撥的場景很簡單,比如我主動叫你幫我做一件事,然後你做完這件事之後會通知我,"通知我"這個動作就是介面回撥的動作.介面回撥重在理解思就好.再舉個例子用於下面的程式碼演示,老師讓學生做課堂練習,學生做完練習後並告訴老師. 二.什麼是介面回撥 在

Java 介面傳值

--------------------------MainActivity------------------------public class MainActivity extends AppCo

java介面

兩個類:Dog和Cat,一個介面CallBack。 1 Dog類,實現介面CallBack介面: public class Dog implements CallBack { private Cat cat; public Dog(Cat li){

Java中的單例模式、工廠模式、介面、異常

for迴圈:起點為基本資料型別,包括boolean . equals():重寫原因,希望在地址不同但內容相同時也能返回true。 匿名物件:直接new出物件,不需要物件名來接收。 new Person().show(); 內部類:類

JAVA中的介面

  定義: /** * @author Administrator * @project: TestOne * @package: PACKAGE_NAME * @date: 2018/11/30 0030 15:42 * @brief: 郭寶 */ public

Android筆記:詳解介面(interface/abstract)的用法

使用場景 小明想要問小紅借10塊錢,小紅答應借. 但是小紅很關心小明還錢,因為小紅想要在小明還錢之後,去買好吃的蛋糕. 這個時候, 小紅又不能時時刻刻催著小明還錢. 只能等小明還錢的時候通知小紅了; 那麼, 小明通知小紅的這個過程, 我把它叫做 回撥

java為什麼要使用介面

也許你在程式設計的過程中會發現這樣一行程式碼:格式如: 介面 介面變數 = new 介面 子類(); Link<String> link = new ArrayList<String>(); //Link為一個介面 Arra

java介面機制詳解

原文地址:http://www.open-open.com/lib/view/open1461482321288.html 序言 最近學習java,接觸到了回撥機制(CallBack)。初識時感覺比較混亂,而且在網上搜索到的相關的講解,要麼一言帶過,要麼說的比較

java的多型,instanceof,內部類,介面

1、多型    a、定義:是指允許不同類的物件對同一個訊息作出不同的響應。             即同一個訊息可以根據傳送物件的不同,採取多種不同的行為方式。            (傳送訊息即方法的呼叫)    b、多型實現:屬於動態繫結的一種。比如:一個父類去例項化子

java 介面。Android Interface 自定義介面

不是很懂java 的Interface 介面的具體怎麼實現的。在網上看了很多例子,終於理解了那麼點啊。 因為原來在學習做一個微信的語音功能要做到一個介面功能。微信的後面有時間會寫出來。 Interf

JAVA + 非同步請求 + 《AsyncTask》 + 介面

package Utils; import android.os.AsyncTask; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConne

Java中(向上,向下)造型造型和介面中的問題

最近回顧了一下java繼承中的問題,下面貼程式碼: package com.cc; /** * 目的:問題驗證,關於向上和向下造型過程中,檢測存在繼承關係的物件訪問關係。 * * * @

介面目的和用法解析

一、回撥的含義和用途 1. 什麼是回撥 一般來說,模組之間都存在一定的呼叫關係,從呼叫方式上來看,可分為三類: 同步呼叫:同步呼叫是一種阻塞式呼叫,即在函式A的函式體裡通過書寫函式B的函式名來呼叫之,使記憶體中對應函式B的程式碼得以執行。 非同步呼叫

C#中的委託與Java中的介面

  最近因為業務需求學習起了C#,對於學過Java的人來說,C#其實還是挺好懂的,基本上很多語法都是相通的。今天就談談我對C#和Java中不同的地方的理解吧。   說到Java中的介面回撥那麼就不得不提觀察者設計模式,所謂觀察者模式就是A(觀察者 Observ

java機制

簡單的解釋       你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裡留下了你的電話,過了幾天店裡有貨了,店員就打了你的電話,然後你接到電話後就到店裡去取了貨。在這個例子裡,你的電話號碼就叫回調函式,你把電話留給店員就叫登

對於Android中介面機制的理解

對於介面回撥機制首先要弄明白的問題是為什麼需要它,也就是介面回撥能為我們解決什麼問題: 在開發過程中我們經常會遇到一些有關觸發執行的問題,比如使用者觸發按鈕,然後程式就執行了一系列的操作的比如註冊登入啊;問題的核心在於為什麼是出發了按鈕才執行,不觸發就不執行嗎? 這個時候就能體現出各

RecyclerView---點選條目---介面

activity_main <Button android:id="@+id/add" android:layout_width="0dp" android:layout_height="wrap_content" android:layout

Android 介面實現Fragment的跳轉

---------------------MainActivity------------------- package com.example.earl.fragmentinterfacejump; import android.app.Activity; import androi

RecyclerView +介面

需要的依賴 com.android.support:recyclerview-v7:28.0.0 MainActivity import android.os.Bundle; import android.support.v7.app.AppCompatActivity;