深入理解Java介面(一)

來源:互聯網
上載者:User

一、Java介面的基本內容

[1].Java程式設計語言中不支援多重繼承(即Java中一個類不能有多於一個的直接父類),但可以實現多個介面,這就間接地實現了多重繼承。

[2].介面(Interface)將產生一個完全抽象的類,它是用來建立類與類之間的協議的,其內部只提供調用方法的形式(建立者確定方法名、參數列表及傳回型別),而沒有提供任何具體的方法體。具體的實現方法(該介面中的所有方法)需要在遵循該特定介面的類中進行實現。建立介面需要使用關鍵字interface,而建立一個遵循某介面的類則需要使用關鍵字implements。

 

二、Java介面的基本特徵

    [1].介面可以包含域,但是這些域不是介面的一部分,它們的值被儲存在該介面的靜態儲存區內;域隱式為public、static、final的(網域名稱通常大寫且單詞之間以底線串連),域不能是“空final”,在使用之前必須顯式地初始化,但可以被非常量運算式初始化。

    [2].當實現一個介面時,介面中的方法必須是public的,通常隱式地為public及abstract的。

    [3].介面必須通過類來實現它的抽象方法,且該類必須實現該介面中的所有方法,否則該類仍是一個抽象類別。

    [4].介面因為沒有構造器而不能進行執行個體化,但運行定義介面類型的引用變數,該引用變數實現了該介面的類的執行個體。比如:

    Interface Base{/*…*/}

    Public class Derived implements Base{/*…*/}

    //! Base b=new Base();error:介面不能進行執行個體化

    Base b=new Derived();//引用變數b被定義為類型Base,引用了Derived執行個體

    [5].一個類只能繼承一個父類,但可以實現多個介面,並可以向上轉型為每個介面(因為每個介面都是一個獨立的類型)。按照先類後介面(多個介面以逗號分開)的順序進行實現。例如:

Class BaseClass{}

    Interface BaseIntfaceA{}

    Interface BaseIntfaceB{}

    Public class Derived extends BaseClass

implements BaseIntfaceA, BaseIntfaceB{}

    [6].介面可以嵌套,嵌套在介面中的介面自動為public而不能修改為private。當實現某個介面時,不需要實現嵌套在其內部的任何介面。類中的private介面不能在定義它的類之外被實現。

    [7].介面可以很好地應用於松耦合軟體系統構建之中。通過介面可以很方便地對已經存在的系統進行自下而上的抽象,對於任意的兩個類,只要他們存在有相同的功能,就能從中抽象出一個介面類型,而不用理會它們是否源自同一個父類。對於兩個系統,通過介面互動可以獲得比抽象類別互動更好的松耦合特性。

 

三、介面與抽象類別的異同點

    [1].相同點:

<1>.二者都包含有描述系統能提供服務的抽象方法,都不提具體實現的方法體,都不能被執行個體化。

<2>.都位於繼承樹的上層,都代表系統的抽象層。當系統使用繼承樹上的類時,應盡量把引用變數聲明為繼承樹的上層抽象類別型,這樣可以提高兩個系統的松耦合程度。

    [2].不同點:

<1>.抽象類別中可以定義調用方法的方法體以免在子類中的重複定義,對子類中修改方法體不會造成影響;對於介面,一旦介面公布就必須保持穩定,因為隨意向介面中添加方法會直接影響到子類的功能,此時子類要麼實現新增的方法,要麼就聲明為抽象類別,而聲明為抽象類別就意味著該類不能進行執行個體化,也就限制了該類的應用了。

<2>.一個類只能有一個直接父類(此父類可以是抽象類別),但它可以實現多個介面。當子類覆蓋父類的調用方法或隱藏父類的成員變數及靜態方法時,Java虛擬機器採用不同的綁定機制,為了簡化系統設計的複雜性和綁定機制,Java禁止多重繼承;對於介面,其內部只含有抽象方法而沒有執行個體變數及靜態方法,即便一個類實現多個介面也不會增加綁定機制的複雜性。

 

四、介面和抽象類別的使用原則

    [1].使用介面作為系統與外界互動的視窗。

    [2].介面必須保持穩定性。

    [3].使用抽象類別來定製系統中擴充點。

 

Reference:

       Bruce Eckel. <<Thinking in Java>>4-th
Edition

http://baidu/zhidao
HiЁnd. Java介面

張廣彬. Java課程設計案例精編.
清華大學出版社

一、Java介面的基本內容

[1].Java程式設計語言中不支援多重繼承(即Java中一個類不能有多於一個的直接父類),但可以實現多個介面,這就間接地實現了多重繼承。

[2].介面(Interface)將產生一個完全抽象的類,它是用來建立類與類之間的協議的,其內部只提供調用方法的形式(建立者確定方法名、參數列表及傳回型別),而沒有提供任何具體的方法體。具體的實現方法(該介面中的所有方法)需要在遵循該特定介面的類中進行實現。建立介面需要使用關鍵字interface,而建立一個遵循某介面的類則需要使用關鍵字implements。

 

二、Java介面的基本特徵

    [1].介面可以包含域,但是這些域不是介面的一部分,它們的值被儲存在該介面的靜態儲存區內;域隱式為public、static、final的(網域名稱通常大寫且單詞之間以底線串連),域不能是“空final”,在使用之前必須顯式地初始化,但可以被非常量運算式初始化。

    [2].當實現一個介面時,介面中的方法必須是public的,通常隱式地為public及abstract的。

    [3].介面必須通過類來實現它的抽象方法,且該類必須實現該介面中的所有方法,否則該類仍是一個抽象類別。

    [4].介面因為沒有構造器而不能進行執行個體化,但運行定義介面類型的引用變數,該引用變數實現了該介面的類的執行個體。比如:

    Interface Base{/*…*/}

    Public class Derived implements Base{/*…*/}

    //! Base b=new Base();error:介面不能進行執行個體化

    Base b=new Derived();//引用變數b被定義為類型Base,引用了Derived執行個體

    [5].一個類只能繼承一個父類,但可以實現多個介面,並可以向上轉型為每個介面(因為每個介面都是一個獨立的類型)。按照先類後介面(多個介面以逗號分開)的順序進行實現。例如:

Class BaseClass{}

    Interface BaseIntfaceA{}

    Interface BaseIntfaceB{}

    Public class Derived extends BaseClass

implements BaseIntfaceA, BaseIntfaceB{}

    [6].介面可以嵌套,嵌套在介面中的介面自動為public而不能修改為private。當實現某個介面時,不需要實現嵌套在其內部的任何介面。類中的private介面不能在定義它的類之外被實現。

    [7].介面可以很好地應用於松耦合軟體系統構建之中。通過介面可以很方便地對已經存在的系統進行自下而上的抽象,對於任意的兩個類,只要他們存在有相同的功能,就能從中抽象出一個介面類型,而不用理會它們是否源自同一個父類。對於兩個系統,通過介面互動可以獲得比抽象類別互動更好的松耦合特性。

 

三、介面與抽象類別的異同點

    [1].相同點:

<1>.二者都包含有描述系統能提供服務的抽象方法,都不提具體實現的方法體,都不能被執行個體化。

<2>.都位於繼承樹的上層,都代表系統的抽象層。當系統使用繼承樹上的類時,應盡量把引用變數聲明為繼承樹的上層抽象類別型,這樣可以提高兩個系統的松耦合程度。

    [2].不同點:

<1>.抽象類別中可以定義調用方法的方法體以免在子類中的重複定義,對子類中修改方法體不會造成影響;對於介面,一旦介面公布就必須保持穩定,因為隨意向介面中添加方法會直接影響到子類的功能,此時子類要麼實現新增的方法,要麼就聲明為抽象類別,而聲明為抽象類別就意味著該類不能進行執行個體化,也就限制了該類的應用了。

<2>.一個類只能有一個直接父類(此父類可以是抽象類別),但它可以實現多個介面。當子類覆蓋父類的調用方法或隱藏父類的成員變數及靜態方法時,Java虛擬機器採用不同的綁定機制,為了簡化系統設計的複雜性和綁定機制,Java禁止多重繼承;對於介面,其內部只含有抽象方法而沒有執行個體變數及靜態方法,即便一個類實現多個介面也不會增加綁定機制的複雜性。

 

四、介面和抽象類別的使用原則

    [1].使用介面作為系統與外界互動的視窗。

    [2].介面必須保持穩定性。

    [3].使用抽象類別來定製系統中擴充點。

 

Reference:

       Bruce Eckel. <<Thinking in Java>>4-th
Edition

http://baidu/zhidao
HiЁnd. Java介面

張廣彬. Java課程設計案例精編.
清華大學出版社

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.