抽象類別和抽象方法以及和介面區別,抽象類別介面區別

來源:互聯網
上載者:User

抽象類別和抽象方法以及和介面區別,抽象類別介面區別
一、抽象類別

       抽象類別、具體類是相對的,並非絕對的。抽象是一種概念性名詞,具體是一種可見可觸摸的現實對象。概念越小,則其抽象程度就越大,其外延也越大,反之亦然。簡單說,比如“人”比“男人”抽象一點,而“生物”又比“人”更抽象一點,“物質”又比“生物”更抽象。
       抽象的概念是由具體概念依其“共性”而產生的,把具體概念的諸多個性排出,集中描述其共性,就會產生一個抽象性的概念。抽象思維,是人類思維達到進階階段產生的一種能力,例如,當小孩子思維尚未成熟時,他們只能掌握具體概念,他們在學習代詞“你、我、他”時往往遇到困難,因為代詞具有較高的抽象性。
總之,抽象概念的外延大,內涵小,具體概念的外延小,內涵大。


二、抽象方法
        抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式為:
1 abstract void fun();

  抽象方法必須用abstract關鍵字進行修飾。如果一個類含有抽象方法,則稱這個類為抽象類別,抽象類別必須在類前用abstract關鍵字修飾。因為抽象類別中含有無具體實現的方法,所以不能用抽象類別建立對象。

  下面要注意一個問題:在《JAVA編程思想》一書中,將抽象類別定義為“包含抽象方法的類”,但是後面發現如果一個類不包含抽象方法,只是用abstract修飾的話也是抽象類別。也就是說抽象類別不一定必須含有抽象方法。個人覺得這個屬於鑽牛角尖的問題吧,因為如果一個抽象類別不包含任何抽象方法,為何還要設計為抽象類別?所以暫且記住這個概念吧,不必去深究為什麼。

123 [publicabstract class ClassName {    abstract void fun();}

  從這裡可以看出,抽象類別就是為了繼承而存在的,如果你定義了一個抽象類別,卻不去繼承它,那麼等於白白建立了這個抽象類別,因為你不能用它來做任何事情。對於一個父類,如果它的某個方法在父類中實現出來沒有任何意義,必鬚根據子類的實際需求來進行不同的實現,那麼就可以將這個方法聲明為abstract方法,此時這個類也就成為abstract類了。

  包含抽象方法的類稱為抽象類別,但並不意味著抽象類別中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變數和普通的成員方法。注意,抽象類別和普通類的主要有三點區別:

  1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public。

  2)抽象類別不能用來建立對象;

  3)如果一個類繼承於一個抽象類別,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。

  在其他方面,抽象類別和普通的類並沒有區別。
 

三、介面

介面,英文稱作interface,在軟體工程中,介面泛指供別人調用的方法或者函數。從這裡,我們可以體會到Java語言設計者的初衷,它是對行為的抽象。在Java中,定一個介面的形式如下:

123 [publicinterface InterfaceName { }

  介面中可以含有 變數和方法。但是要注意,介面中的變數會被隱式地指定為public static final變數(並且只能是public static final變數,用private修飾會報編譯錯誤),而方法會被隱式地指定為public abstract方法且只能是public abstract方法(用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤),並且介面中所有的方法不能有具體的實現,也就是說,介面中的方法必須都是抽象方法。從這裡可以隱約看出介面和抽象類別的區別,介面是一種極度抽象的類型,它比抽象類別更加“抽象”,並且一般情況下不在介面中定義變數。

  要讓一個類遵循某組特地的介面需要使用implements關鍵字,具體格式如下:

12 class ClassName implements Interface1,Interface2,[....]{}

  可以看出,允許一個類遵循多個特定的介面。如果一個非抽象類別遵循了某個介面,就必須實現該介面中的所有方法。對於遵循某個介面的抽象類別,可以不實現該介面中的抽象方法。


四、抽象類別和介面的區別

Java提供和支援建立抽象類別和介面。它們的實現有共同點,不同點在於:

  • 介面中所有的方法隱含的都是抽象的。而抽象類別則可以同時包含抽象和非抽象的方法。

  • 類可以實現很多個介面,但是只能繼承一個抽象類別

  • 類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類別聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

  • 抽象類別可以在不提供介面方法實現的情況下實現介面。

  • Java介面中聲明的變數預設都是final的。抽象類別可以包含非final的變數。

  • Java介面中的成員函數預設是public的。抽象類別的成員函數可以是private,protected或者是public。

  • 介面是絕對抽象的,不可以被執行個體化。抽象類別也不可以被執行個體化,但是,如果它包含main方法的話是可以被調用的。



感謝閱讀上海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.