java中的abstract和interface差異
這裡需要談到抽象類和Interface的差別,abstract class和interface是支援抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的面向物件能力,兩者的區別如下:
(1)相同點
A,兩者都是抽象類,都不能例項化。
B,interface實現類及abstrct class的子類都必須要實現已經宣告的抽象方法。
(2)不同點
A,interface實現,要用implements,而abstract class的實現,要用extends。
B,一個類可以實現多個interface,但一個類只能繼承一個abstract class。
C,interface強調特定功能的實現,而abstract class強調所屬關係。
D,儘管interface實現類及abstrct class的子類都必須要實現相應的抽象方法,但實現的形式不同。interface中的每一個方法都是抽象方法,都只是宣告的(declaration, 沒有方法體),必須要實現。而abstract class的子類可以有選擇地實現。
抽象類的這個選擇有兩點含義:一是Abastract class中並非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現,也可以通過再次宣告其方法為抽象的方式,無需實現,留給其子類來實現,但此類必須也宣告為抽象類。既是抽象類,當然也不能例項化。
E,interface是完全抽象的,只能宣告方法,而且只能宣告pulic的方法,不能宣告private及protected的方法,不能定義方法體,也不能宣告例項變數。