1. 抽象類java
抽象就是將擁有共同方法和屬性的對象提取出來,提取後,從新設計一個更加通用、更加大衆化的類,就叫抽象類。編程
1)抽象方法:由abstract修飾,只有方法的定義,沒有方法的實現;ide
2)包含抽象方法的類必須是抽象類;spa
3)抽象類:由abstract修飾,不能被實例化,能夠包含抽象方法和非抽象方法;設計
4)抽象類都是須要被繼承的,子類繼承後再實現如下操做:對象
4.1)子類中重寫父類的抽象方法繼承
4.2)子類也聲明爲抽象類接口
5)抽象類的意義:it
5.1)封裝子類共有的變量和方法--代碼的重用class
5.2)爲子類提供一種公共的類型--向上造型
5.3)定義抽象方法,子類重寫它,爲子類提供一個公共的入口
2. 接口
1)制定一個標準、規範
2)只要遵照了標準,就能作某件事
3)由interface定義
接口中只能包含常量和抽象方法--數據默認爲常量(public static final),
方法默認爲抽象的(public abstract)
4)接口不能被實例化
5)接口須要被實現的,子類實現接口, 必須重寫接口中的全部抽象方法
6)一個類能夠實現多個接口, 又繼承類,又實現接口時,需先繼承再實現
7)接口之間能夠繼承(extends)
3. 抽象類和接口的區別
① 從語法角度:abstract class方法中能夠有本身的數據成員,也能夠有非abstract的成員方法,並賦予方法的默認行爲,而在interface方式中通常不定義成員數據變量,全部的方法都是abstract,方法不能擁有默認的行爲。
② 從編程的角度:abstract class在java語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。而一個類能夠實現多個interface。
③ 從問題域角度:abstract class在Java語言中體現了一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is a"關係,即父類和派生類在概念本質上應該是相同的。對於interface 來講則否則,並不要求interface的實現者和interface定義在概念本質上是一致的,僅僅是實現了interface定義的契約而已。
詳細區別:
1.抽象類能夠有構造方法,接口中不能有構造方法。
2.抽象類中能夠有普通成員變量,接口中沒有普通成員變量
3.抽象類中能夠包含非抽象的普通方法,接口中的全部方法必須都是抽象的,不能有非抽象的普通方法。
4.抽象類中的抽象方法的訪問類型能夠是public,protected,但接口中的抽象方法只能是public類型的,而且默認即爲public abstract類型。
5.抽象類中能夠包含靜態方法,接口中不能包含靜態方法
6.抽象類和接口中均可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型能夠任意,但接口中定義的變量只能是public static final類型。
7. 一個類能夠實現多個接口,但只能繼承一個抽象類。