文章目錄
- 抽象類
- 抽象類的特點
- 抽象方法
- 抽象方法的特點
- 模板設計模式
- 模板設計模式能解決的問題
- 示例
#抽象類與抽象方法
抽象類
用abstract關鍵字來修飾一個類時,這個類就叫抽象類。
public abstract 類名{...
}
抽象類的特點
1)抽象類不能被實例化。
2)抽象類不一定要包含抽象方法,也可以沒有抽象方法。
3)一旦包含了抽象方法,則該類必須為抽象類。
4)抽象類可以有任意成員(抽象類的本質還是類),比如:非抽象方法、構造器,靜態屬性等。
5)如果一個類繼承了抽象類,則它必須實現抽象類的所有抽象方法,除非它自己也聲明為抽象類。
抽象方法
用abstract來修飾一個方法時,這個方法就是抽象方法。
public abstract void 方法名()
抽象方法的特點
1)抽象方法必須定義在抽象類內部。
2)抽象方法沒有方法體,需要繼承該類的子類去重寫方法實現。
3)抽象方法不能用private、final、static來修飾,因為這些關鍵字都是和重寫相違背的。
模板設計模式
抽象類體現的就是一種模板模式的的設計,抽象類作為多個子類的通用模板,子類在抽象類的繼承上進行擴展、改造,但子類總體上會保留抽象類的行為方式。
模板設計模式能解決的問題
1)當功能內部一部分實現是確定的,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。
2)編寫一個抽象父類,父類提供了多個子類的通用方法,并把一個或多個方法留給其子類實現,就是一種模板設計模式。
示例
需求:有多個類,完成不同的任務job,要求統計得到完成任務的時間。
抽象類:
abstract public class Template { //抽象類-模板設計模式public abstract void job(); //抽象方法public void calculateTime() { //實現方法,調用 job 方法//得到開始的時間long start = System.currentTimeMillis();job(); //動態綁定機制//得的結束的時間long end = System.currentTimeMillis();System.out.println("任務執行時間 " + (end - start));}
}
子類重寫job:
public class AA extends Template {@Overridepublic void job() { //實現 Template 的抽象方法 joblong num = 0;for (long i = 1; i <= 800000; i++) {num += i;}}
}
測試:
public class Test1 {public static void main(String[] args) {AA aa = new AA();aa.calculateTime();}
}
成功得到結果: