Java為什麼要使用接口_java接口怎麼使用

2021-01-06 電子發燒友
  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.

  I’m a teacher.

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • Java對象為啥要實現Serializable接口?
    ,關於這個問題,腦海中的另一個思維(B)立馬給出了回復「居然問這麼幼稚和基礎的問題,實現Serilizable接口是為了序列化啊!」,思維(A):「哦,好吧!然而,然後呢?」此時思維(B)陷入了沉默,突然感覺自己有點淺薄了,好像寫了這麼多年Java還真是沒有太關注過Serializable這個接口!為什麼一定要實現Serializable接口?它的底層原理是什麼?
  • php使用curl方法 請求java接口
    2018-08-06 11:47:18 來源: 陽旭網絡 舉報   php使用
  • jdk動態代理為什麼要使用接口,而不是使用繼承
    最近面試當時問到了Spring AOP的實現方式,然後就問到了jdk動態代理為什麼使用接口而不是使用繼承,當時一時沒轉過彎來,後來自己回來看了一下原來如此,面試有時就是這樣問題不難,但就是可能想不到這個點去回答。
  • java什麼是接口?接口有什麼作用?接口如何使用?
    1、在java中接口是一種特殊的抽象類。跟一般的抽象類相比,接口裡面的所有方法都是抽象方法,接口口裡面的所有屬性都是常量。也就是說,接口裡面只有方法定義而沒有任何方法實現。上面所說的是接口的概念。接口就相當於一份契約,根據外部應用需要的功能,約定了實現類應該要實現的功能,但是具體的實現類除了實現接口約定的功能外,還可以根據需要實現其他一些功能。這是允許的。他就是說實現類的功能包含但不僅限於接口約束功能。 通過使用接口,可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關係,接口就是實現類對外的外觀。
  • Java教程:Java基礎教程之set接口
    Set接口java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它Collection接口中的方法基本一致,並沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了。
  • 什麼是Java NIO Path接口操作文件,如何操作使用?
    1、前言Path接口位於java.nio.file包中,所以Path接口的完全限定名稱為java.nio.file.Path。在許多方面,java.nio.file.Path接口類似於java.io.File類,但是有一些細微的差別。不過,在許多情況下,您可以使用Path接口來替換File類的使用。
  • 面試官:Java序列化為什麼要實現Serializable接口?我懵了
    2、Java對象為什麼要實現Serializable接口?3、使用Serializable接口需要注意的問題?4、常見的序列化技術?5、序列化技術的選型什麼是序列化和反序列化?Java對象為什麼要實現Serializable接口?
  • Java ArrayList 為什麼要實現 RandomAccess 接口?
    總結在我們的開發中,List接口是最常見不過,而且我們幾乎每天都在用ArrayList或者LinkedList,但是細心的同學有沒有發現,ArrayList中實現了RandomAccess接口,而LinkedList卻沒有實現RandomAccess接口,這是為什麼呢?
  • Java接口的作用與意義
    ,所以類的特徵也同樣適用於接口:一個java文件中可以定義多個接口,但是最多只能有一個公開接口公開接口的接口名必須和java文件的文件名完全相同一個接口編譯後會生成一個class文件2.類與接口的關係定義一個實現類實現AI接口,因為接口中都是抽象方法,所以在implements時需要實現抽象方法
  • 為什麼Java類不支持多繼承而接口可以?
    每個用Java的人都知道java不支持多繼承,但為什麼呢?無論從抽象還是多態等層面思考,感覺都是行得通的,那麼為什麼不支持呢?Java之父,James Gosling在1995年的一份白皮書中給出了關於為什麼不支持多繼承「JAVA omits many rarely used, poorly understood, confusing features of C++ that in
  • java調用印表機接口
    我們平時使用某些軟體或者在超市購物的時候都會發現可以使用印表機進行列印,本文教大家如何使用java完成這個功能。並在最後附上代碼。
  • java動態代理為什麼需要基於接口
    面試的時候,常常面試官會問spring 的aop底層原理,而aop的底層原理就是動態代理,每個java程式設計師基本都能耳熟能詳,對jdk動態代理和cglib動態代理的區別也瞭然於胸,jdk動態代理只能基於接口,而cglib並不需要。
  • Java中迭代器Iterarot接口用法
    單單從中文翻譯也不易理解迭代器的意思啊, 其實Iterator是1個接口, 它的作用就是遍歷容器的所有元素.一, Iterator 接口簡介Iterator 是為了實現對java容器(collection)進行遍歷功能的1個接口.
  • Java中的函數式接口
    什麼是函數式接口java中函數式接口中的定義如下:函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。需要注意以下幾點:JDK1.8中接口支持默認方法,默認方法和靜態方法都不屬於抽象方法,因此,函數式接口可以包含默認方法和抽象方法;接口默認繼承java.lang.Object,如果接口顯示聲明覆蓋了Object中方法,也不算抽象方法,例如,toString(),equals()等。
  • Java基礎教程:Java基礎知識之List接口
    List接口我們掌握了Collection接口的使用後,再來看看Collection接口中的子類,他們都具備那些特性呢?接下來,我們一起學習Collection中的常用幾個子類(java.util.List集合、java.util.Set集合)。
  • XDoc-Java 1.1.0 發布,Java 純注釋生成接口文檔工具
    markdown和離線/在線html等為何使用XDoc?支持html:/** * 生成離線的HTML格式的接口文檔 */@Testpublic void buildHtml() throws Exception { /**注意!!!路徑必須是要能掃描到源碼工程的路徑,執行生成的文件打開沒有接口目錄,說明沒掃描到,請優先確認自己傳入的路徑是否正確!!!
  • (轉載)Java使用IText實現PDF籤章
    言歸正傳,正文開始Itext包 和 BC包要自己實現PDF數字籤章,是一件極其浩大的工程,難度很大(看看市面上多少公司是吃這一行的飯就知道了),好在java是個開源的世界,有很多開源項目。這裡,咱們使用itext來實現一下pdf的數字籤章(為什麼挑itext,很大原因是,自己在做這一塊的時候,網上對於itext的使用也有很多博文,不過,大多都是用的比較早期的itext,itext官網目前的版本的已經有了變化,網上普遍的做法都已經不適用了,還有一個原因,itext官網有官方教程,各個模塊的樣例,很方便)。
  • Java transient關鍵字使用小記
    1.transient的作用及使用方法我們都知道一個對象只要實現了Serilizable接口,這個對象就可以被序列化,java的這種序列化模式為開發者提供了很多便利,我們可以不必關係具體序列化的過程,只要這個類實現了Serilizable接口,這個類的所有屬性和方法都會自動序列化。
  • Java反射註解妙用(獲取所有接口說明)
    作者:俊俊的小熊餅乾cnblogs.com/wenjunwei/p/10293490.html前言最近在做項目權限,使用shiro實現restful接口權限管理,對整個項目都進行了重構。而權限管理需要用到所有的接口配置,包括接口url地址,接口唯一編碼等。想要收集所有的接口信息,如果工程接口很多,工作量可想而知。這裡用了反射,來獲取所有接口的信息,接口再多,也不過幾秒鐘的事。
  • JAVA:接口中的靜態方法及默認方法
    01接口中的靜態方法在java中接口設計的初衷是作為抽象的規範,接口不是類,而是對類的一組需求描述。在java SE8之前,靜態方法通常都是放在工具類中,如Collecation接口對應的工具類是Collecations。