Java接口是什么
Java接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
接口(英語:Interface),在JAVA編程語言中是一個抽象類型(Abstract Type),它被用來要求類(Class)必須實現指定的方法,使不同類的對象可以利用相同的界面進行溝通。接口通常以interface來宣告,它僅能包含方法簽名(Method Signature)以及常數宣告(變量宣告包含了 static 及 final),一個接口不會包含方法的實現(僅有定義)。
接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須宣告為抽象類(Abstract Class)。另外,在Java中,接口類型可用來宣告一個變量,他們可以成為一個空指針,或是被綁定在一個以此接口實現的對象。
其中一個使用接口的優勢是,可以利用他們模擬多重繼承,類在JAVA中不允許多重繼承,所有在JAVA中的類必須而且僅能有一個父類,而java.lang.Object(JAVA類型系統中最頂層的類型)是唯一一個例外。
JAVA的類可以被實現許多個接口,然而一個接口則無法實現其他的接口。
Java為什么要使用接口
實現具體功能時,接口和實現的類分離。接口定義為XxxService,實現為XxxServiceImpl。接口提供了一個公用的方法提供方。 接口是用來規定子類的行為的。
面向接口編程的好處:
1、根據客戶提出的需求提出來,作為接口的;業務具體實現是通過實現接口類來完成的。
2、當客戶提出新的需求時,只需編寫該需求業務邏輯新的實現類。
3、假如采用了這種模式,業務邏輯更加清晰,增強代碼可讀性,擴展性,可維護性。
4、接口和實現分離,適合團隊協作開發。
5、實現松散耦合的系統,便于以后升級,擴展。
Java接口能實現什么功能呢
在Java語言規范中,一個方法的特征僅包括方法的名字,參數的數目和種類,而不包括方法的返回類型,參數的名字以及所拋出來的異常。在Java編譯器檢查方法的重載時,會根據這些條件判斷兩個方法是否是重載方法。但在Java編譯器檢查方法的置換時,則會進一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
Java接口本身沒有任何實現,因為Java接口不涉及表象,而只描述public行為,所以Java接口比Java抽象類更抽象化。但是接口不是類,不能使用new 運算符實例化一個接口。
如:
x=new comparable(……);//這個是錯誤來的。
但是可以聲明接口變量
Comparable x; //這是允許的。
Java接口的方法只能是抽象的和公開的,Java接口不能有構造器,Java接口可以有public、靜態的和final屬性。即接口中的屬性可以定義為
public static final int value=5;
接口把方法的特征和方法的實現分割開來。這種分割體現在接口常常代表一個角色,它包裝與該角色相關的操作和屬性,而實現這個接口的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,并不要求其它的共同之處。
接口的定義方式如下
接口的主體包含著抽象方法,但所有方法在接口內(定義上)都是抽象(Abstract)方法,所以abstract的關鍵字在接口內則不被需要。由于接口代表著一個對外行為的集合,所以任何方法在接口內都是public(公開的)。
接口內的成員皆為靜態(static)、final及公開(public),反之,他們可以成為任何類或接口的類型
接口的使用解決類只能單繼承的問題,因為一個類可以實現多個接口。
那么Java中要如何去實現一個接口并且在實現他的子類中調用接口中的方法呢?
接口的實現方式
如果一個類實現了一個接口,而沒有實現接口的所有方法,則它必須被標注為abstract(抽象類)。一個抽象類的子類必須實現它未完成的方法,假如該項子類仍不會實現接口的所有方法,那么該項子類依然需要被標注為abstract。
接口通常被使用在Java編程語言,用來做回調函數使用[2] 。Java并不允許方法作為參數傳遞使用,因此,其中一個解決辦法則是可以定義一個接口,把這個接口當成方法的參數,以此來使用該項對象的方法簽名。
子接口[編輯]
接口可以被延伸為數個不同的接口,可以使用上述所描述的方法,舉例來說:
以上的程序片段是合法定義的子接口,與類不同的是,接口允許多重繼承,而Predator 及 Venomous 可能定義或是繼承相同的方法,比如說kill(Prey prey),當一個類實現VenomousPredator的時候,它將同時實現這兩種方法。
有些泛用的Java接口可供參考:
Comparable
擁有一個方法compareTo,用以描述兩個對象是否相等,或是其中一個對象大于另外一個對象。泛型允許已經實現的類,其對象可以用來互相比較。
Serializable 是一個marker interface 沒有任何接口或是字段,僅有一個空的主體,它被用來表示一個類可以被序列化。它的Javadoc描述了他是如何運作,而且不需要被強制編程。
為了能夠向上轉型為多個基類型。即利用接口的多實現,可向上轉型為多個接口基類型。
java接口的使用
java接口或抽象類都可以使用向上轉型,它們用的都是java運行時多態技術,或者叫運行期綁定技術。下面是一個java接口的普遍用法:
結果:
I’m a student.
-
接口
+關注
關注
33文章
8496瀏覽量
150831 -
JAVA
+關注
關注
19文章
2957瀏覽量
104544
發布評論請先 登錄
相關推薦
評論