抽象類與接口緊密相關(guān)。然接口又比抽象類更抽象,這主要體現(xiàn)在它們的差別上:1)類可以實現(xiàn)無限個接口,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實現(xiàn)接口,從而得出接口是用來解決多重繼承問題的。2)抽象類當中可以存在非抽象的方法,可接口不能且它里面的方法只是一個聲明必須用public來修飾沒有具體實現(xiàn)的方法。3)抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認的都是靜態(tài)常量(static final)。4)這一點也是最重要的一點本質(zhì)的一點"抽象類是對象的抽象,然接口是一種行為規(guī)范"。
以上是它們本身的異同,下面再來從實際應(yīng)用講講它們的異同!
不同之處:
1、定義
抽象類表示該類中可能已經(jīng)有一些方法的具體定義,但是接口就僅僅只能定義各個方法的界面(方法名,參數(shù)列表,返回類型),并不關(guān)心具體細節(jié)。
1、用法
1)在繼承抽象類時,必須覆蓋該類中的每一個抽象方法,而每個已實現(xiàn)的方法必須和抽象類中指定的方法一樣,接收相同數(shù)目和類型的參數(shù),具有同樣的返回值,這一點與接口相同。
2)當父類已有實際功能的方法時,該方法在子類中可以不必實現(xiàn),直接引用的方法,子類也可以重寫該父類的方法(繼承的概念)。
3)而實現(xiàn) (implement)一個接口(interface)的時候,是一定要實現(xiàn)接口中所定義的所有方法,而不可遺漏任何一個。
4)另外,抽象類不能產(chǎn)生對象的,但可以由它的實現(xiàn)類來聲明對象。
有鑒于此,在實現(xiàn)接口時,我們也常寫一個抽象類,來實現(xiàn)接口中的某些子類所需的通用方法,接著在編寫各個子類時,即可繼承該抽象類來使用,省去在每個都要實現(xiàn)通用的方法的困擾。