Android應用程序采用Java語言編寫,Java語法和C/C++有很大的相似性,但也有一些特別之處。Android中Interface的使用,從名字上看,Interface即為接口的意思,多用于實現(xiàn)回調(diào)(Call Back)方法。在Interface的定義中,一般的代碼架構如代碼清單1-1所示。
代碼清單1-1 InterfaceServer.java
public class InterfaceServer {
public interface OnClickListener{
public void onClick();
}
private OnClickListener mOnClickListener=null;
public void onClick(){
if(mOnClickListener!=null)
mOnClickListener.onClick();
}
public void setOnClickListener(OnClickListener l){
mOnClickListener = l;
}
}
對于Interface內(nèi)部的方法而言,只需要聲明,而不需要具體實現(xiàn)。從編譯器的角度來看,Interface會被認為是一個指向方法的指針。
使用InterfaceServer的代碼一般如代碼清單1-2所示。
代碼清單1-2 使用InterfaceServer
public void addToButton {
Button b = (Button)findViewById(R.id.button);
onClickListener l = new OnClickListener(){
public void onClick(View v){
TextView tv1 = (TextView) findViewById(R.id.tv1);
tv1.setText("The Button has been clicked");
}
};
b.setOnClickListener(l);
}
Interface和Class的區(qū)別?
Interface接口:可以理解成一種特殊的類,由常量和抽象方法組成的特殊類;接口不可以實例化;接口中的方法沒有方法體;繼承接口的類一定要實現(xiàn)接口中定義的方法。
Class類:可以實例化;可以定義自己的字段,屬性,方法等;類可以實現(xiàn)多個接口,但只能繼承一個類。
"interface"(接口)關鍵字使抽象的概念更深入了一層。我們可將其想象為一個"純"抽象類。它允許創(chuàng)建者規(guī)定一個類的基本形式:方法名、自變量列表以及返回類型,但不規(guī)定方法主體。接口也包含了基本數(shù)據(jù)類型的數(shù)據(jù)成員,但它們都默認為static和final。接口只提供一種形式,并不提供實施的細節(jié)。
接口這樣描述自己:"對于實現(xiàn)我的所有類,看起來都應該象我現(xiàn)在這個樣子"。因此,采用了一個特定接口的所有代碼都知道對于那個接口可能會調(diào)用什么方法。這便是接口的全部含義。所以我們常把接口用于建立類和類之間的一個"協(xié)議"。有些面向對象的程序設計語言采用了一個名為"protocol"(協(xié)議)的關鍵字,它做的便是與接口相同的事情。
為創(chuàng)建一個接口,請使用interface關鍵字,而不要用class。與類相似,我們可在interface關鍵字的前面增加一個public關鍵字(但只有接口定義于同名的一個文件內(nèi));或者將其省略,營造一種"友好的"狀態(tài)。
為了生成與一個特定的接口(或一組接口)相符的類,要使用implements(實現(xiàn))關鍵字。我們要表達的意思是"接口看起來就象那個樣子,這兒是它具體的工作細節(jié)"。除這些之外,我們其他的工作都與繼承極為相似。