抽象類:
抽象方法必須用abstract關鍵字進行修飾。如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。因為抽象類中含有無具體實現的方法,所以不能用抽象類創建對象。
抽象類可以擁有成員變量和普通的成員方法。
抽象類和普通類的主要有三點區別:
1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),缺省情況下默認為public。
2)抽象類不能用來創建對象;
3)如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。
接口:
接口中的變量會被隱式地指定為public static final變量,並且只能是public static final變量,用private修飾會報編譯錯誤,而方法會被隱式地指定為public abstract方法且只能是public abstract方法,用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤,並且接口中所有的方法不能有具體的實現,也就是說,接口中的方法必須都是抽象方法。
抽象類和接口的區別:
語法層面上的區別
1)一個類只能繼承一個抽象類,而一個類卻可以實現多個接口;
2)抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;
3)接口中不能含有靜態代碼塊以及靜態方法,而抽象類可以有靜態代碼塊和靜態方法;
4)抽象類可以提供成員方法的實現細節,而接口中只能存在public abstract 方法;
5)抽象類的抽象方法可以是public,protected,default類型,而接口的方法只能是public。
設計層面上的區別
1)抽象類是對一種事物的抽象,即對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進行抽象。
繼承是一個 "是不是"的關系,而 接口 實現則是 "有沒有"的關系。
2)設計層面不同,抽象類作為很多子類的父類,它是一種模板式設計。而接口是一種行為規范,它是一種輻射式設計。