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)抽象類的子類明確要求方法覆寫,而普通類沒有;1、抽象類由於存在屬性,因此會有構造方法來初始化屬性。子類物件例項化時依然先執行父類構造方法,再呼叫子類構造方法。(2)抽象類只比普通類多了抽象方法,其他部分相同;
(3)抽象類物件必須經過向上轉型才能例項化;
(4)雖然子類可以繼承任何類,但開發中,普通類最好繼承抽象類。
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 編寫乙個抽象父類...