20 抽象類與模板設計模式

2021-09-28 13:47:43 字數 3284 閱讀 6656

1、抽象類是含有抽象方法的類。抽象方法沒有方法體,必須用abstract定義。

abstract

class

a// 普通方法

public

abstract

void

print()

;// 抽象方法

}public

class

demo

}

結果顯示,無法直接例項化抽象類物件.普通類的物件例項化後,該物件可以呼叫類中的屬性和方法.而抽象類中存在抽象方法,抽象方法沒有方法體無法呼叫,因此無法產生例項化物件.

2、抽象類使用原則:

(1)抽象類必須有子類;

(2)抽象類的子類(非抽象類時)必須覆寫抽象類中所有的抽象方法(強制子類進行方法覆寫)

(3)抽象類物件的例項化依靠子類完成,採用向上轉型方式。

範例:使用抽象類

abstract

class

apublic

abstract

void

print()

;// 抽象方法

}class

bextendsa}

public

class

demo

}

由上述**,可知:

(1)抽象類的子類明確要求方法覆寫,而普通類沒有;

(2)抽象類只比普通類多了抽象方法,其他部分相同;

(3)抽象類物件必須經過向上轉型才能例項化;

(4)雖然子類可以繼承任何類,但開發中,普通類最好繼承抽象類。

1、抽象類由於存在屬性,因此會有構造方法來初始化屬性。子類物件例項化時依然先執行父類構造方法,再呼叫子類構造方法。

2、抽象類不能使用final定義,因為抽象類必須有子類。

3、抽象外部類不允許使用static定義,而抽象內部類可以使用static宣告。使用static定義的抽象內部類相當於抽象外部類,繼承時使用外部類.內部類的形式表示類名。

abstract

classa}

class

xextends

a.b}

public

class

demo

}

4、static定義的方法可以沒有例項化物件的情況下直接呼叫,即使是抽象類中的static方法。

abstract

classa}

public

class

demo

}

5、有時抽象類只需要乙個特定的子類操作,因此可以將該子類定義為該抽象類的內部類。

abstract

classa}

public

static a getinstance()

}public

class

demo

}

上述設計在系統類庫中較為常見,目的是:為使用者隱藏不需要知道的子類。

6、觀察下述**:

abstract

class

apublic

abstract

void

print()

;}class

bextends

a// 2. 父類構造呼叫子類的print,此時num = 0,列印輸出。

public

void

print()

}public

class

demo

}

在構造方法執行完之前,屬性的內容均為其對應的資料型別的預設值。子類在執行構造方法前必先執行父類的構造方法,因為此時子類構造方法還沒執行,就呼叫print()輸出了num的值,所以num為0.

要求:設計三個類,通過類描述如下行為:

(1)機械人:充電、工作;

(2)人:吃飯、工作、睡覺;

(3)豬:吃飯、睡覺

思路:定義乙個抽象類,具有吃飯、睡覺、工作的抽象方法。根據子類的不同,具體實現抽象方法。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-9oy51fpx-1570848167779)(/18-2.png 「思路圖」)]

abstract

class

action

}// 不確定方法中的具體行為,定義為抽象類

public

abstract

void

eat();

public

abstract

void

sleep()

;public

abstract

void

work()

;}

定義子類

class

robot

extends

action

public

void

sleep()

public

void

work()

}class

human

extends

action

public

void

sleep()

public

void

work()

}class

pigextends

action

public

void

sleep()

public

void

work()

}

範例:測試程式

public

class

demo

public

static

void

fun(action act)

}

結果顯示:子類要實現操作,必須按照action類的標準。

抽象類 模板方法設計模式

一 抽象類的應用 1 概念 當多個類存在相同的功能時,我們就可以把這些功能提出出來,單獨封裝在乙個類裡面,只提出方法名,不提出方法實體就是功能的主體部分不同,我們進行向上抽取,只抽取功能的定義部分,不抽取功能的主體。2 abstract,抽象的,可以修飾類和方法,被修飾的方法只能有方法名,沒有方法實...

利用抽象類實現模板設計模式

有時候,我們會碰到另外的一種情況,比如,銀行利息的計算,都是利率乘以本金和存款時間,但是,各種存款方式計算利率的方式的不同,一般而言,定期的存款利率比活期的利率要高 而定期的時間越長,它的利率也越高。因此,我們在設計 銀行賬戶 這個類的時候,我們可以將計算利息這個方法定義成抽象方法,然後,再在各種不...

抽象類的模板方法設計模式

一 前言 抽象類體現的就是一種模板模式的設計,抽象類作為多個子類的通用模板,子類在抽象類的基礎上進行擴充套件 改造,但子類總體上會保留抽象類的行為方式。二 模板方法能解決的問題 1 當功能內部一部分實現是確定的,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。2 編寫乙個抽象父類...