壹、兩者相同點
1、不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。
2、抽象類裏的抽象方法必須全部被子類所實現,子類不能全部實現父類抽象方法,那麽該子類還只能是抽象類。壹個類實現接口的時候,如不能全部實現接口方法,那麽該類也只能為抽象類。
二、兩者不同點?
1、默認的方法實現
抽象類可以有默認的方法實現;接口,Java8規定可以為接口提供默認實現的方法並且不用強。
2、實現
制子類來重寫子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要重寫抽象類中的抽象方法;接口子類使用關鍵字implements 來實現接口,它需要重寫接口中沒有默認。?
3、構造器
抽象類可以有構造器,接口不能有構造器。
4、與正常Java類的區別
除了不能實例化抽象類之外,和普通Java類沒有任何區別;接口是完全不同的類型外。
5、訪問修飾符
抽象方法可有public.protected和default、abstract修飾符。不能用privatestatic.synchronize、 native 修飾;
接口屬性默認修飾符是publicstatic final (必須賦初值) ,方法默認修飾符是publicabstract. Java8 開始出現靜態方法,多加static關鍵字。
6、main方法
並且可以運行它;接口沒有main方法,因此不能運行它。
7、多繼承
抽象類可以繼承壹個類和實現多個接口;接口只可以繼承壹個或多個接口。
8、速度
抽象類比接口速度快;接口是稍微有點慢,因為它需要花時間去尋找在類中的實現方法。
9、添加新方法
如果往抽象類中添加新的方法,可以給它提供默認的實現,不需要改變現代碼;如果往接口中添加方法,並且該方法沒有默認實現,必須改變實現該接口的類。
擴展資料:
抽象類的運用意義
在面向對象方法中,抽象類主要用來進行類型隱藏。構造出壹個固定的壹組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現方式。
這個抽象描述就是抽象類,而這壹組任意個可能的具體實現則表現為所有可能的派生類。模塊可以操作壹個抽象體。
由於模塊依賴於壹個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴展此模塊的行為功能。
為了能夠實現面向對象設計的壹個最核心的原則OCP(Open-Closed Principle),抽象類是其中的關鍵所在。