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;