java中abstract class與interface的區別

來源:互聯網
上載者:User

說java和C#容易,但是細節地方從來不瞭解。例如,我剛發現java中也有abstract,例如C#中有readonly欄位,具有const一部分的功能。

 

from:http://hi.baidu.com/tsj2209/blog/item/99dd931a59d879dfad6e759f.html

在Java語言中,abstract class和interface是支援抽象類別定義的兩種機制。abstract class和interface之間在對於抽象類別定義的支援方面具有很大的相似性,甚至可以相互替換。其實,兩者之間還是有很大的區別的,對於它們的選擇甚至反映出對於問題領域本質的理解、對於設計意圖的理解是否正確、合理。

 

不能建立abstract 類的執行個體,然而可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類的一個執行個體。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類別為。

介面(interface)是抽象類別的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實作類別不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類別,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算子可以用來決定某對象的類是否實現了介面。

介面可以繼承介面。抽象類別可以實現(implements)介面,抽象類別是可以繼承實體類,但前提是實體類必須有明確的建構函式。介面更關注“能實現什麼功能”,而不管“怎麼實現的”。

1.相同點
A. 兩者都是抽象類別,都不能執行個體化。
B. interface實作類別及abstrct class的子類都必須要實現已經聲明的抽象方法。

2. 不同點
A. interface需要實現,要用implements,而abstract class需要繼承,要用extends。
B. 一個類可以實現多個interface,但一個類只能繼承一個abstract class。
C. interface強調特定功能的實現,而abstract class強調所屬關係。
D. 儘管interface實作類別及abstrct class的子類都必須要實現相應的抽象方法,但實現的形式不同。interface中的每一個方法都是抽象方法,都只是聲明的(declaration, 沒有方法體),實作類別必須要實現。而abstract class的子類可以有選擇地實現。
這個選擇有兩點含義:
    一是Abastract class中並非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。
    二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現,也可以通過再次聲明其方法為抽象的方式,無需實現,留給其子類來實現,但此類必須也聲明為抽象類別。既是抽象類別,當然也不能執行個體化。
E. abstract class是interface與Class的中介。
interface是完全抽象的,只能聲明方法,而且只能聲明pulic的方法,不能聲明private及protected的方法,不能定義方法體,也不能聲明執行個體變數。然而,interface卻可以聲明常量變數,並且在JDK中不難找出這種例子。但將常量變數放在interface中違背了其作為介面的作用而存在的宗旨,也混淆了interface與類的不同價值。如果的確需要,可以將其放在相應的abstract class或Class中。
abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以聲明抽象方法,以規範子類必須實現的功能;另一方面,它又可以定義預設的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的執行個體變數,以供子類通過繼承來使用。

3. interface的應用場合
A. 類與類之前需要特定的介面進行協調,而不在乎其如何?。
B. 作為能夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。
C. 需要將一組類視為單一的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.