抽象類就是將相似或類似的部分給抽取出來,這句話看上去很搞笑,其實它說出了抽象類的真理。你可能會說」我不是能夠重寫一個公共類,而後我實例化這個公共類,調用相同的方法就能夠了」,這裏是能夠,實際上抽象類的工做也就是這個,不過他省去了你實例化的這個步驟,而且你還能夠生載這個方法 spa
抽象類特性: 繼承
1. 非抽象子類必須徹底實現這個抽象中全部的抽象方法 接口
2. 抽象類不能被實例化,它的意義在於被擴展。訪問方式TestClass::test(‘我是抽象方法’); test
3. 抽象類一般(也能夠沒有)至少有1個抽象方法,抽象方法中沒有大括號。非抽象方法是有的 變量
4. 抽象方法沒必要實現具體的功能,由子類來完成 擴展
5. 在子類實現抽象類的方法時,其子類的可見性必須大於或等於抽象方法的定義 方法
6. 抽象類的方法能夠有參數,也能夠爲空 im
7.若是抽象方法有參數,那麼子類的實現也必須有相同的參數個數 工作
他們的不一樣點: 參數
1.抽象類中能夠有非抽象的方法而接口中只可以有抽象的方法!
2.一個子類能夠繼承多個接口,而一個類只能繼承一個抽象類!
3.接口的使用方式經過implements關鍵字進行,抽象類則是經過繼承extends關鍵字進行!
4.在聲明上
接口中只能聲明抽象方法(包括靜態抽象方法)和靜態變量.而抽象類除了包含通常類的特色,即包括屬性和通常方法外,還能夠聲明抽象方法(包括靜態抽象方法).
5.在寫法上
1、接口中的抽象方法前不用也不能加abstract關鍵字,默認隱式就是抽象方法,也不能加final關鍵字來防止抽象方法的繼承.而抽象類中抽象方法前則必須加上abstract表示顯示聲明爲抽象方法.
2、接口中的抽象方法默認是public的,也只能是public的,不能用private、protected修飾符修飾.而抽象類則能夠。
6. 一個非抽象類若是extends一個抽象類後只需(而且必需)全部的實現抽象方法就好了,非抽象方法能夠不實現。若是implements一個接口,就必須實現接口中的全部方法(由於接口中的方法均爲抽象方法);