1、一、兩者相同點(diǎn)不能直接實(shí)例化,如果要實(shí)例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對(duì)象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對(duì)象。
2、2、抽象類里的抽象方法必須全部被子類所實(shí)現(xiàn),子類不能全部實(shí)現(xiàn)父類抽象方法,那么該子類還只能是抽象類。
(資料圖片)
3、一個(gè)類實(shí)現(xiàn)接口的時(shí)候,如不能全部實(shí)現(xiàn)接口方法,那么該類也只能為抽象類。
4、二、兩者不同點(diǎn)默認(rèn)的方法實(shí)現(xiàn)抽象類可以有默認(rèn)的方法實(shí)現(xiàn);接口,Java8規(guī)定可以為接口提供默認(rèn)實(shí)現(xiàn)的方法并且不用強(qiáng)。
5、2、實(shí)現(xiàn)制子類來(lái)重寫(xiě)子類使用extends關(guān)鍵字來(lái)繼承抽象類。
6、如果子類不是抽象類的話,它需要重寫(xiě)抽象類中的抽象方法;接口子類使用關(guān)鍵字implements 來(lái)實(shí)現(xiàn)接口,它需要重寫(xiě)接口中沒(méi)有默認(rèn)。
7、3、構(gòu)造器抽象類可以有構(gòu)造器,接口不能有構(gòu)造器。
8、4、與正常Java類的區(qū)別除了不能實(shí)例化抽象類之外,和普通Java類沒(méi)有任何區(qū)別;接口是完全不同的類型外。
9、5、訪問(wèn)修飾符抽象方法可有public.protected和default、abstract修飾符。
10、不能用privatestatic.synchronize、 native 修飾。
11、接口屬性默認(rèn)修飾符是publicstatic final (必須賦初值) ,方法默認(rèn)修飾符是publicabstract. Java8 開(kāi)始出現(xiàn)靜態(tài)方法,多加static關(guān)鍵字。
12、6、main方法并且可以運(yùn)行它;接口沒(méi)有main方法,因此不能運(yùn)行它。
13、7、多繼承抽象類可以繼承一個(gè)類和實(shí)現(xiàn)多個(gè)接口;接口只可以繼承一個(gè)或多個(gè)接口。
14、抽象類的運(yùn)用意義在面向?qū)ο蠓椒ㄖ校橄箢愔饕脕?lái)進(jìn)行類型隱藏。
15、構(gòu)造出一個(gè)固定的一組行為的抽象描述,但是這組行為卻能夠有任意個(gè)可能的具體實(shí)現(xiàn)方式。
16、這個(gè)抽象描述就是抽象類,而這一組任意個(gè)可能的具體實(shí)現(xiàn)則表現(xiàn)為所有可能的派生類。
17、模塊可以操作一個(gè)抽象體。
18、由于模塊依賴于一個(gè)固定的抽象體,因此它可以是不允許修改的;同時(shí),通過(guò)從這個(gè)抽象體派生,也可擴(kuò)展此模塊的行為功能。
19、為了能夠?qū)崿F(xiàn)面向?qū)ο笤O(shè)計(jì)的一個(gè)最核心的原則OCP(Open-Closed Principle),抽象類是其中的關(guān)鍵所在。
本文分享完畢,希望對(duì)大家有所幫助。