java語言

當前位置 /首頁/計算機/java語言/列表

Java的抽象和介面

Java廣泛應用於PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,下面為大家介紹一下Java的抽象和介面,一起來看看!

Java的抽象和介面

  一、抽象:

抽象類(abstract class):使用了abstract關鍵字所修飾的類叫做抽象類。抽象類無法例項化,也就是說,不能new出來一個抽象類的物件(例項)。

抽象方法(abstract method):使用abstract關鍵字所修飾的方法叫做抽象方法。抽象方法需要定義在抽象類中。相對於抽象方法,之前所定義的方法叫做具體方法(有宣告,有實現)。

如果一個類包含了抽象方法,那麼這個類一定是抽象類。

如果某個類是抽象類,那麼該類可以包含具體方法(有宣告、有實現)。

如果一個類中包含了抽象方法,那麼這個類一定要宣告成abstract class,也就是說,該類一定是抽象類;反之,如果某個類是抽象類,那麼該類既可以包含抽象方法,也可以包含具體方法。

無論何種情況,只要一個類是抽象類,那麼這個類就無法例項化。

在子類繼承父類(父類是個抽象類)的情況下,那麼該子類必須要實現父類中所定義的所有抽象方法;否則,該子類需要宣告成一個abstract class。

  二、介面

Java語言不支援一個類有多個直接的父類(多繼承),但現例項子中,又有很多類似於多繼承的例子,比如教師,他的父類既可以是人,也可以是父母,所以,在java中就用繼承來填充這個空缺,java不可以多繼承,但可以實現(implements)多個介面,間接的實現了多繼承。

Java介面的特徵歸納:

1、Java介面中的成員變數預設都是public,static,final型別的(都可省略),必須被顯示初始化,即介面中的成員變數為常量(大寫,單詞之間用"_"分隔)

2、Java介面中的方法預設都是public,abstract型別的(都可省略),沒有方法體,不能被例項化

3、Java介面中只能包含public,static,final型別的成員變數和public,abstract型別的成員方法

4、 介面中沒有構造方法,不能被例項化

5、 一個介面不能實現(implements)另一個介面,但它可以繼承多個其它的介面

6、Java介面必須通過類來實現它的抽象方法 如:publicclass A implements B{...}

7、 當類實現了某個Java介面時,它必須實現介面中的所有抽象方法,否則這個類必須宣告為抽象的

8、不允許建立介面的例項(例項化),但允許定義介面型別的引用變數,該引用變數引用實現了這個介面的類的例項

9、一個類只能繼承一個直接的父類,但可以實現多個介面,間接的實現了多繼承.

10、通過介面,可以方便地對已經存在的系統進行自下而上的抽象,對於任意兩個類,不管它們是否屬於同一個父類,只有它們存在相同的'功能,就能從中抽象出一個介面型別.對於已經存在的繼承樹,可以方便的從類中抽象出新的介面,但從類中抽象出新的抽象類卻不那麼容易,因此介面更有利於軟體系統的維護與重構.對於兩個系統,通過介面互動比通過抽象類互動能獲得更好的鬆耦合.

11,、介面是構建鬆耦合軟體系統的重要法寶,由於介面用於描述系統對外提供的所有服務,因此介面中的成員變數和方法都必須是public型別的,確保外部使用者能訪問它們,介面僅僅描述系統能做什麼,但不指明如何去做,所有介面中的方法都是抽象方法,介面不涉及和任何具體例項相關的細節,因此介面沒有構造方法, 不能被例項化,沒有例項變數.

  三、它們的區別

相同點:

1、代表系統的抽象層,當一個系統使用一顆繼承樹上的類時,應該儘量把引用變數宣告為繼承樹的上層抽象型別,這樣可以提高兩個系統之間的鬆耦合

2、都不能被例項化

3、 都包含抽象方法,這些抽象方法用於描述系統能提供哪些服務,但不提供具體的實現

不同點:

1、在抽象類中可以為部分方法提供預設的實現,從而避免在子類中重複實現它們,這是抽象類的優勢,但這一優勢限制了多繼承,而介面中只能包含抽象方法.由於在抽象類中允許加入具體方法,因此擴充套件抽象類的功能,即向抽象類中新增具體方法,不會對它的子類造成影響,而對於介面,一旦介面被公佈,就必須非常穩定,因為隨意在介面中新增抽象方法,會影響到所有的實現類,這些實現類要麼實現新增的抽象方法,要麼宣告為抽象類

2、 一個類只能繼承一個直接的父類,這個父類可能是抽象類,但一個類可以實現多個介面,這是介面的優勢,但這一優勢是以不允許為任何方法提供實現作為代價的

3、為什麼Java語言不允許多重繼承呢?當子類覆蓋父類的例項方法或隱藏父類的成員變數及靜態方法時,Java虛擬機器採用不同的繫結規則,假如還允許一個類有多個直接的父類,那麼會使繫結規則更加複雜,

因此,為了簡化系統結構設計和動態繫結機制,Java語言禁止多重繼承.而介面中只有抽象方法,沒有例項變數和靜態方法,只有介面的實現類才會實現介面的抽象方法(介面中的抽象方法是通過類來實現的),因此,一個類即使有多個介面,也不會增加Java虛擬機器進行動態繫結的複雜度.因為Java虛擬機器永遠不會把方法與介面繫結,而只會把方法與它的實現類繫結.

4、使用介面和抽象類的總體原則:

1)用介面作為系統與外界互動的視窗站在外界使用者(另一個系統)的角度,介面向使用者承諾系統能提供哪些服務,站在系統本身的角度,介面制定系統必須實現哪些服務,介面是系統中最高層次的抽象型別.通過介面互動可以提高兩個系統之間的送耦合系統A通過系統B進行互動,是指系統A訪問系統B時,把引用變數宣告為系統B中的介面型別,該引用變數引用系統B中介面的實現類的例項。

2)Java介面本身必須非常穩定,Java介面一旦制定,就不允許隨遇更加,否則對外面使用者及系統本身造成影響

3)用抽象類來定製系統中的擴充套件點

抽象類來完成部分實現,還要一些功能通過它的子類來實現

TAG標籤:介面 抽象 JAVA #