Java程式開發中abstract 和 interface的區別詳解_java

來源:互聯網
上載者:User

先給大家說下基本概念

    在Java語言中, abstract class 和interface 是支援抽象類別定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 物件導向能力。abstract class和interface之間在對於抽象類別定義的支援方面具有很大的相似性,甚至可以相互替換,因此很多開發人員在進 行抽象類別定義時對於abstract class和interface的選擇顯得比較隨意。其實,兩者之間還是有很大的區別的,對於它們的選擇甚至反映出對 於問題領域本質的理解、對於設計意圖的理解是否正確、合理。

  abstract class和interface在Java語言中都是用來進行抽象類別(本文 中的抽象類別並非從abstract class翻譯而來,它表示的是一個抽象體,而abstract class為Java語言中用於定義抽象類別的一種方法, 請讀者注意區分)定義的,那麼什麼是抽象類別,使用抽象類別能為我們帶來什麼好處呢?

  在 物件導向的概念中,我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣。並不是 所有的類都是用來描繪對象的(把類具體化),如果一個類中沒有包含足夠的資訊來描繪一個具體的對象,這樣的類就是抽象類別。抽象類別往往用來表徵我們在對問題領域進行分析、 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。比如:如果我們進行一個圖形編輯軟體的開發,就會發現問題領域存在著圓、 三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域是不存在的,它就是一個抽象概念。正是因為抽象的概念 在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類別是不能夠執行個體化的。

java開發裡面經常會用到虛函數和介面,這兩者的區別是什麼呢?

abstract: 子類裡面只能繼承一個父類

interface: 子類可以實現多個介面

那什麼時候用abstract,什麼時候用interface呢?

當某個子類和父類是 is a關係時,比如一個亞洲人是一個人,那麼一個亞洲人的子類可以繼承一個人的父類。
當子類和父類是like a關係時,比如一個美洲超人像一個超人,超人的能力不是每個人都有的,所以不是所有人的屬性,我們不能把超能力歸於人的父類,這時就可以用interface

代碼例子:

public abstract class Man {public abstract void eat();} public interface SuperPower {public void superPower();}public class AsiaMan extends Man { @Overridepublic void eat() {System.out.println("亞洲人用筷子吃");}} public class AmericanSuperMan extends Man implements SuperPower {public void superPower() {System.out.println("美國超人會飛");}@Overridepublic void eat() {System.out.println("美國人用刀叉吃");}}public static void main(String[] args) {Man anAsiaMan = new AsiaMan();AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();anAsiaMan.eat();anAmericanSuperMan.eat(); anAmericanSuperMan.superPower();} 

運行結果:

美國人用刀叉吃
美國超人會飛
亞洲人用筷子吃

正確的使用abstract和interface有利提高代碼可讀性,當人們看到extend時就會知道這是一個is a什麼,看到implement時可以知道這個類有什麼特性like a

聯繫我們

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