1. 程式人生 > >java介面和抽象類的區別和作用(功能、用途、好處)

java介面和抽象類的區別和作用(功能、用途、好處)

Java介面:

總結了4點關於JAVA中介面存在的意義:

       1、重要性:在Java語言中, abstract class 和interface 是支援抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向物件能力。

  2、簡單、規範性:如果一個專案比較龐大,那麼就需要一個能理清所有業務的架構師來定義一些主要的介面,這些介面不僅告訴開發人員你需要實現那些業務,而且也將命名規範限制住了(防止一些開發人員隨便命名導致別的程式設計師無法看明白)。

  3、維護、拓展性:比如你要做一個畫板程式,其中裡面有一個面板類,主要負責繪畫功能,然後你就這樣定義了這個類。

         可是在不久將來,你突然發現這個類滿足不了你了,然後你又要重新設計這個類,更糟糕是你可能要放棄這個類,那麼其他地方可能有引用他,這樣修改起來很麻煩。

         如果你一開始定義一個介面,把繪製功能放在接口裡,然後定義類時實現這個介面,然後你只要用這個介面去引用實現它的類就行了,以後要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。

  4、安全、嚴密性:介面是實現軟體鬆耦合的重要手段,它描敘了系統對外的所有服務,而不涉及任何具體的實現細節。這樣就比較安全、嚴密一些(一般軟體服務商考慮的比較多)。

那麼什麼是介面呢?

介面是一種能力

1:介面的命名規則與型別不同。如果修飾符是public。則該介面在整個專案中可見 ,如果省略修飾符 則該介面只能在該包可見

2:介面中可以定義常量,不能定義變數,介面中的屬性都會自動用public static final修飾,即介面中的屬性都是全域性靜態常量,介面中的常量必須在定義時指定初始值

3:介面中所有的方法抽象方法。介面中的方法都會自動用public abstract修飾。即介面中只有全域性抽象方法,

4:和抽象類一樣,介面不能被例項化,介面中不能有狗構造方法

5:介面之間可以通過extends 實現繼承關係,一個介面可以繼承多個介面。但介面不能繼承類

6:介面的實現類必須實現介面的全部方法,否則必須定義為抽象類

7:一個類只能有一個直接父類,但可以通過implements實現多個介面,當雷在繼承父類的同時有實現了多個介面時,extends關鍵字必須位於implements關鍵字之前

介面的注意事項:

01.介面不能例項化,因為介面是比抽象類抽象程度更高的型別
02一個類如果實現了某個介面,必須重寫該介面中的所有方法
03.介面不能有構造,但是抽象類可以有
04.介面中所有方法都公有的抽象方法
05.介面中的所有欄位必須都是公有的靜態常量
06.介面本身也是一種資料型別
07.介面只是為實現它的類定義了規範,保證實現類方法簽名和介面中對應方法一致。
08.通過介面可以實現多繼承
09.一個藉口中最好只定義一個方法,防止介面汙染

java中介面的特點:

1. 介面中的方法,永遠都被public來修飾

2. 介面中沒有構造方法,也不能例項化介面物件

3. 介面中只有方法的宣告,沒有方法體

4. 介面中只有常量,如果定義變數,在編譯的時候都會預設加上“public static final”

5. 介面中定義的方法都需要實現類來實現,如果實現類不能實現介面中的所有方法,則實現類需要定義為抽象類

6. 靜態方法不能被子類重寫(覆蓋),因此介面中不定宣告靜態方法

7. 使用介面可以實現多繼承

抽象類:

抽象類就是不能使用new方法進行例項化的類(不能被例項化,可以有多個抽象方法),即沒有具體例項物件的類,抽象類有點類似於“模板”的作用,目的是根據其格式來建立和修改新的類,物件不能由抽象類直接建立,只可以通過抽象類派生出新的子類,再由其子類來建立物件,當一個類被宣告為抽象類時,要在這個類前面加上修飾符abstract,在抽象類中的成員方法可以包括一般方法和抽象方法

 

抽象類的關鍵字:abstract

abstract 關鍵字,和哪些關鍵字不能共存?

final:被final修飾的類不能有子類。而被abstract修飾的類一定是一個父類。
private: 抽象類中的私有的抽象方法,不被子類所知,就無法被複寫。
而抽象方法出現的就是需要被複寫。
static:如果static可以修飾抽象方法,那麼連物件都省了,直接類名呼叫就可以了

 

java中抽象類的特點:

 

1. 如果一個類中有抽象方法,那麼這個類一定是抽象類

 2. 抽象類中不一定有抽象方法

 3. 抽象類中可以存在抽象方法

 4. 抽象類中可以存在構造方法

 5. 抽象類中可以存在普通屬性、方法、靜態屬性和靜態方法

 6. 抽象類中的抽象方法需要有子類實現,如果子類不實現,則子類也需要定義為抽象的

7,抽象方法和抽象類都必須被abstract關鍵字修飾。

8,抽象類不可以用new建立物件。因為呼叫抽象方法沒意義

9:抽象類中的抽象方法要被使用,必須由子類複寫起所有的抽象方法

介面和抽象類的區別之處:

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

2. 類可以實現很多個介面,但是隻能繼承一個抽象類

3. 類可以不實現抽象類和介面宣告的所有方法,在這種情況下,類也必須得宣告成是抽象的

4. 抽象類可以在不提供介面方法實現的情況下實現介面

5. java介面中宣告的變數預設都是final的,抽象類可以包含非final變數

6. java介面中的成員函式預設都是public的,抽象類中的成員函式可以是private,protected或者是public的

7. 介面是絕對抽象的,不可以被例項化。抽象類也不可以被例項化,但是如果它包含main方法的話是可以被呼叫的

 

8:抽象類中可以有普通方法,介面中不能。

9:抽象類可以有構造,介面不能

10:抽象類中可以有普通欄位,而介面中不行

11:抽象類不能實現多繼承,介面可以

12:符合isa關係的選用抽象類,符合hasa關係的選用介面比抽象類抽象程度更高