1. 程式人生 > >舉例說明java中抽象類和介面的區別

舉例說明java中抽象類和介面的區別

先定義一個介面:

圖1

介面中定義了兩個方法,現在定義一個普通類實現這個介面

圖2

這時候發現報錯了,以前只知道實現介面必須實現其中的方法,卻不知道為什麼要實現。最近才瞭解到:

如果一個類繼承了某個抽象類或者實現了某個介面都需要對其中的抽象方法進行實現,否則該類需要被宣告為抽象類。

而在介面中有幾點需要注意:

1.介面中的所有方法都是抽象方法(和修飾詞abstract沒有一點關係),也就是完全抽象。

2.介面內不能構造方法;

3.介面一旦被實現(implements),介面內的方法必須全部實現(沒有abstract修飾),但是當實現類為抽象類時,介面內的方法可以不實現或者部分實現;

4.介面不能被例項(new 物件),只能例項化實現介面的類。

所以圖2會報錯。

圖3

這就是通過實現介面中的方法來保證不報錯。

圖4

定義抽象類的方法實現介面,這樣可以不寫介面中方法的實現。

下面我們再來看抽象類:

定義一個抽象類:

圖5

可以看到抽象類中有兩個抽象方法,和一個普通方法,這裡需要注意的是普通方法必須要加上{}程式碼塊,程式碼塊中可以不寫內容,但不能沒有。

圖6

抽象類說明:

1.有抽象方法的類一定是抽象類,但抽象類裡可以沒有抽象方法(當然也可以抽象方法+一般方法);

2.抽象類裡可以構造方法,但當其他類繼承(extends)時,子類必須用super() 繼承父類的構造方法;

3.抽象類一旦被繼承,抽象方法在子類必須全部實現(沒有abstract修飾),但是當子類也為抽象類時,父類的抽象方法可以不用實現或者部分實現;

4.抽象類不能被例項(new 物件),只能例項化實現了抽象方法的子類。

圖7

這裡寫圖片描述

抽象類中的抽象方法必須在繼承他的子類中進行重寫,不進行重寫的話,需要定義這個子類為抽象類。

一般方法如果要進行重寫的話,需要自己手動override。

圖8

Java提供和支援建立抽象類和介面。它們的實現有共同點,不同點在於:

1.介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
2.類可以實現很多個介面,但是隻能繼承一個抽象類


3.抽象類可以在不提供介面方法實現的情況下實現介面。
4.Java介面中宣告的變數預設都是final的。抽象類可以包含非final的變數。
5.Java介面中的成員函式預設是public的。抽象類的成員函式可以是private,protected或者是public。
介面是絕對抽象的,不可以被例項化。抽象類也不可以被例項化,但是,如果它包含main方法的話是可以被呼叫的。