什么是接口?
- 一個
Java
接口(interface)是一些方法特征的集合,這些方法特征來自於具體方法,這些方法符合它們一般來自於一些在系統中不斷出現的方法。一個接口只有方法的特征,而沒有方法的實現,因此這些方法在不同的地方被實現時,可以具有完全不同的行為。在Java
語言中,Java
接口還可以定義public
的變量。 - 接口把方法的特征和方法的實現分割開來。這種分割,體現在接口常常代表一個角色(role),它包裝與該角色相關的操作和屬性,而實現這個接口的類便扮演這個角色的演員(類)。一個角色(接口)可以由不同的演員(類)來演,而不同的演員(類)之間除了扮演一個共同的角色(接口)之外,並不要求有任何其他的共同之處。
注意:
-
在人們講到“接口”時,這個詞往往有兩種不同的含義:
- 第一種是指
Java
接口,這是一種Java
語言中存在的結構,有特定的語法和結構。 - 第二種僅僅是指一個類所具有的方法的特征集合,是一種邏輯上的抽象。
- 第一種是指
-
Java
的接口可以有public
、靜態的(static
)和final
的屬性。
接口的用法
- 定義與實現
public interface Test{
public static final int num; //成員常量具有固定的修飾符:public static final
public abstract void method; //成員函數具有固定的修飾符:public abstract
}
public class Testimpl implements Test{
// 實現接口中的所有方法
.....
}
接口的特性
- 接口不是類,尤其不用使用
new
運算符實例一個接口。 - 不能構造接口的對象,卻能聲明接口的變量。(出現在回調設計模式中,體現了
Java
的多態特性)
/*
*功能:到達指定的時間發出通告
*/
public interface ActionListener{
void actionPerformed(ActionEvent event);
}
class TimePrinter implements ActionListener{
//此處ActionEvent參數提供了事件的相關信息
public void actionPerformed(ActionEvent event){
Date now = new Data();
System.out.println("At the tone, the time is" + now);
Toolkit.getDefaultToolkit().beep();
}
}
//然后構造這個類的一個對象,並將它傳遞給Timer構造器。
ActionListener listener = new TimePrinter();
Timer t = new Timer(10000, listener);
- 接口中不能包含實例域或靜態方法。
- 接口與接口之間可以是繼承關系,而且可以實現多繼承。
public interface Moveable{
void move(double x, double y);
}
public interface Powered extends Moveable{
double milesPerGallon();
}
注意點
- 對於接口中的固定修飾符,可以省略。
- 一個類實現多個接口時,接口與接口之間要用逗號隔開。
- 接口的變量必須引用實現了接口的類對象。
對於自己在學習接口時所存在的疑惑
接口為何不能用繼承代替呢?
回答:
Java
中不支持多繼承,也就是不能存在一個子類繼承多個父類的情況,當然你會問這是為什么呢.因為這會造成子類中某些方法或者變量的不確定性。- 為了彌補①中采用單繼承所帶來的不足,
Java
出現了接口這個概念,接口可以很好的避免這個問題的出現。 Java
中通過多實現接口的方式去解決類之間無法多繼承的問題。
參考書籍
- Java核心技術 卷一
- Java與模式