一、抽象類
抽象方法碧血用abstract關鍵字進行修飾。如果乙個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。抽象類中沒有具體實現的方法,所以不能用抽象類建立物件。
抽象類就是為了繼承而存在的,如果你定義了乙個抽象類,卻不去繼承它,那麼等於百變建立了這個抽象類,因為你不能用它來做任何事。如果乙個父類中的方法實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那麼這個方法就宣告為abstract方法,這個類也就成為了abstract類。
包含抽象方法的類成為抽象類,但是並不意味著抽象類中只能有抽象方法,它和普通的類一樣,同樣可以擁有成員變數和普通的成員方法。抽象類和普通類主要有三個區別:
1、抽象方法必須為public或者protected,因為如果有private的話,子類就無法繼承,也就無法實現這個方法,預設情況下預設為public。
2、抽象類不能用來建立物件。
3、如果乙個類繼承於乙個抽象類,那麼子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為abstract類。
二、介面
介面中可以含有變數和方法,但是介面中的變數會被隱式地指定為public static final變數,並且只能是public static final變數,用private修飾會報錯,而方法會被隱式地指定為public abstract方法且只能是public abstract方法用其他關鍵字會報錯,並且介面中的所有方法不能有具體的實現,也就是說,介面中的方法必須都是抽象方法。一般情況下不在介面中定義變數。
允許乙個類遵循多個特定的介面。如果乙個非抽象類遵循了某個介面,就必須實現該介面中的所有方法。對於遵循某個介面的抽象類,可以不實現該介面中的抽象方法。
三、抽象類與介面的區別
語法層面的區別
1、抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract方法;
2、抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;
3、介面中不能含有靜態**塊以及靜態方法,而抽象類可以有靜態**塊和靜態方法;
4、乙個類只能繼承乙個抽象類,而乙個類卻可以實現多個介面。
設計層面的區別
1、抽象類是對一種事物的抽象,即對類抽象,而介面是對行為抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類區域性進行抽象。
2、設計層面不同,抽象類作為很多子類的父類,它是一種模板式設計,而介面是一種行為規範,它是一種輻射式設計。
Java面試 JDK1 8介面和抽象類
前言 介面是對動作的抽象,抽象類是對根源抽象。使用抽象類,也就是繼承,是一種強耦合的設計,用來描述 a is a b 的關係,即如果說a繼承於b,那麼在流程中將a當做b去使用應該完全沒有問題。介面設計目的就是對類的行為進行約束,也就是提供一種機制,可以強制要求不同的類具有相同的行為。它只約束了行為的...
設計模式學習筆記 4 介面和抽象類
介面和抽象類的區別 抽象類和介面的意義 抽象類是對成員變數和方法的抽象,是一種is a 關係,是為了解決 復用問題,介面僅僅是方法的抽象,是一種has a 關係,表示具有某種行為特性,是為了解決解耦問題,如何決定使用抽象類還是介面 基於介面 抽象 而非實現程式設計 越抽象,越脫離具體某一細節的設計,...
JAVA學習筆記7 介面 抽象類總結
介面與抽象類 總結 同都是不斷向上抽取而來的 異1 抽象類需要被繼承 而且只能單繼承 介面需要被實現 而且可以多實現 2 抽象類中可以定義抽象方法和非抽象方法 子類繼承可以直接使用非抽象方法 而介面必須定義抽象方法 必須由子類去實現 3 抽象類的繼承是所有關係 定義該體系的基本共性內容 比如 程式設...