在abstract class方式中,能夠有本身的數據成員,也能夠有非abstarct的成員方法,而在interface方式的實現中,只可以有靜態的 不能被修改的數據成員(也就是必須是static final的,不過在interface中通常不定義數據成員),全部的成員方法都是abstract的。從某種意義上說,interface是一種特殊 形式的abstract class。java
抽象方法與抽象類:框架
當一個方法爲抽象方法時,意味着這個方法必須被子類的方法所重寫,不然其子類的該方法仍然是abstract的,而這個子類也必須是抽象的,即聲明爲abstract。abstract抽象類不能用new實例化對象,abstract方法只容許聲明不能實現。若是一個類中含有abstract方法,那麼這個類必須用abstract來修飾,固然abstract類也能夠沒有abstract方法。 一個抽象類裏面沒有一個抽象方法可用來禁止產生這種類的對象。(摘自百度文庫:java抽象類和方法,做者:餘書慧先生)spa
抽象方法與接口:設計
在interface中全部的方法都是public abstract的,即便你沒有申明它是public abstract的。在interface中全部的數據成員都是public static final的,即便你沒有申明.但不能是blank final 在編譯時候肯定的。在Java中,interface的地位和class是同樣的。實現interface的類,其interface中全部的方法必須被「實現」,不然這個類成爲一個抽象類。Interface能夠從多個interface獲得繼承,可是不能繼承類。一個類能夠實現多個interfaceorm
總結幾句話來講:對象
一、抽象類和接口都不能直接實例化,若是要實例化,抽象類變量必須指向實現全部抽象方法的子類對象,接口變量必須指向實現全部接口方法的類對象。繼承
二、抽象方法只聲明返回的數據類型、方法名稱和所需的參數,沒有方法體,也就是說抽象方法只須要聲明而不 須要實現。。接口
3. 抽象類裏能夠有構造方法,而接口內不能有構造方法。it
四、抽象類中能夠有普通成員變量,抽象類中的靜態成員變量的訪問類型能夠任意,而接口中不能有普通成員變量,接口裏定義的變 量只能是公共的靜態的常量(public static final)編譯
五、抽象類裏的抽象方法必須所有被子類所實現,若是子類不能所有實現父類抽象方法,那麼該子類只能是抽象類。一樣,一 個實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。
6.抽象類中能夠包含非抽象的普通方法,而接口中全部的方法必須是抽象的,不能有非抽象的普通方法。
七、 抽象類中能夠包含靜態方法,接口內不能包含靜態方法
八、若是一個類裏有抽象方法,那麼這個類只能是抽象類
九、抽象方法要被實現,因此不能是靜態的,也不能是私有的。
十、一個類能夠實現多個接口,但只能繼承一個抽象類
十一、接口更多的是在系統框架設計方法發揮做用,主要定義模塊之間的通訊,而抽象類在代碼實現方面發揮做用,能夠實現代碼的 重用。
特別是對於公用的實現代碼,抽象類有它的優勢。抽象類可以保證明現的層次關係,避免代碼重複。然而,即便在使用抽 象類的場合,也不要忽視經過接口定義行爲模型的原則。從實踐的角度來看,若是依賴於抽象類來定義行爲,每每致使過於複雜的繼承關係,而經過接口定義行爲能 夠更有效地分離行爲與實現,爲代碼的維護和修改帶來方便。