抽象類別是一種特殊的類別,當類別定義中,存在有任何抽象方法,該類別就變成抽象類別。抽象方法與一般成員方法不同,它只有定義方法的原型而沒有本體,方法的本體 (程式碼) 則是交由其子類別覆寫 (override) 程式碼內容。換言之,抽象方法表示說這個類別具別某種功能,但並未具體描述如何實作這個功能。由於抽象類別內含未實作之函式,所以不允許使用new關鍵字來產生物件實體。
舉例來說,動物都會叫 (sound),猫會喵喵叫,狗會汪汪,牛會哞吽叫;換言之,每種動物叫聲並不一樣,因此不適合在動物類別中直接定義sound內容。在這種情況下,可將sound方法宣告為抽象方法,也就是說,在動物類別中只能描述它具有sound方法,但不規範sound內容,而是交由動物的子類別 (猫、狗、牛) 各自覆寫sound程式碼。
抽象類別宣告時,必須使用abstract修飾字。而由於抽象方法是要由繼承的子類別覆寫方法的程式主體,所以抽象方法修飾字abstract不能同時與final、static或private修飾字合併使用。
下面程式碼定義了一個SHAPE類別,SHAPE類別內宣告了area、perimeter及showinfo三個成員方法,其中area及perimeter為抽象方法,而showinfo則有實作程式碼。
1. abstract class SHAPE {
2. protected abstract float area();
3. protected abstract float perimeter();
4. protected void showinfo() {
5. System.out.println ("This is a shape");
6. }
7. }
SHAPE這個抽象類別規範所有幾何圖形皆應具備計算面積 (area) 與周長 (perimeter) 的功能,因為不同幾何圖形計算方式並不一樣,所以不應該在SHAPE中實作計算面積及周長的程式碼,而是交由任何繼承SHAPE的子類別各自覆寫area方法及perimeter方法。