普通類、抽象類和接口區別:


1.普通類可以實例化,接口都不能被實例化(它沒有構造方法),抽象類如果要實例化,抽象類必須指向實現所有抽象方法的子類對象(抽象類可以直接實例化,直接重寫自己的抽象方法),接口必須指向實現所有所有接口方法的類對象。

2.抽象類要被子類繼承,接口要被子類實現。

3.接口只能做方法的聲明,抽象類可以做方法的聲明,也可以做方法的實現。

4.接口里定義的變量只能是公共的靜態常量,抽象類中定義的變量是普通變量。

5.抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類的抽象方法,那么該子類只能是抽象類。同樣,一個實現接口的時候,如果不能全部實現接口方法,那么該類只能是抽象類。

6.抽象方法只能聲明,不能實現。接口是設計的結果,抽象類是重構的結果。

7.抽象類里可以沒有抽象方法。

8.如果一個類里有抽象方法,那么該類只能是抽象類。

9.抽象方法要被實現,所以不能是靜態的,也不能是私有的。

10.接口可以繼承接口,並可多繼承接口,但類只能單繼承。(重要啊)

11.接口中的常量:有固定的修飾符-public static final(不能用private和protected修飾/本質上都是static的而且是final類型的,不管加不加static修飾)。

12.接口中的抽象方法:有固定的修飾符-public abstract 。

13、接口細節:

    若接口中方法或變量沒有寫public,static,final / public,abstract ,會自動補齊 。

   接口中的成員都是共有的。

   接口與接口之間是繼承關系,而且可以多繼承。

   接口不能被實例化

  一個類可以實現多個接口

  在java開發中,我們經常把常用的變量,定義在接口中,作為全局變量使用,訪問形式:接口名.變量名。

  一個接口不能繼承其它的類,但是可以繼承別的接口

  一個重要的原則:當一個類實現了一個接口,要求該類把這個接口的所有方法全部實現

注意:

①抽象類和接口都是用來抽象具體的對象的,但是接口的抽象級別更高。

②抽象類可以有具體的方法和屬性,接口只能有抽象方法和靜態常量。

③抽象類主要用來抽象級別,接口主要用來抽象功能。

④抽象類中,且不包含任何的實現,派生類必須覆蓋它們。接口中所有方法都必須是未實現的。

⑤接口方法,訪問權限必須是公共的 public。

⑥接口內只能有公共方法,不能存在成員變量。

⑦接口內只能包含未被實現的方法,也叫抽象方法,但是不能用 abstract 關鍵字。

⑧抽象類的訪問速度比接口要快,接口是稍微有點慢,因為它需要時間去尋找在類中實現的方法。

⑨抽象類,除了不能被實例化外,與普通 java 類沒有任何區別。

⑩抽象類可以有 main 方法,接口沒有 main 方法。

⑪抽象類可以用構造器,接口沒有。

⑫抽象方法可以有 public、protected 和 default 這些修飾符,接口只能使用默認 public。

⑬抽象類,添加新方法可以提供默認的實現,不需要改變原有代碼。接口添加新方法,子類必須實現。

⑭抽象類的子類用 extends 關鍵字繼承,接口用 implements 來實現。

 

二、什么時候用抽象類和接口

1.若果你擁有一些方法並且想讓他們中的一些有默認實現,那就用抽象類。

2.如果你想實現多重繼承,那么必須使用接口。由於 java 不支持多繼承,子類不能繼承多個父類,但是可以實現多個接口,因此你可以使用接口來實現它。

3.如果基本基本功能在不斷變化,那么就需要使用抽象類。如果不斷改變基本功能並且使用接口,那么所有實現類都需要改變。



作者:因為我的心
鏈接:https://www.jianshu.com/p/846ac4d7539e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM