20. 繼承和多型
阿新 • • 發佈:2020-08-28
繼承和多型
- 們定義一個class的時候,可以從某個現有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。
- 當子類和父類都存在相同的run()方法時,我們說,子類的run()覆蓋了父類的run(),在程式碼執行的時候,總是會呼叫子類的run()。這樣,我們就獲得了繼承的另一個好處:多型。
靜態語言與動態語言
對於靜態語言(例如Java)來說,如果需要傳入Animal型別,則傳入的物件必須是Animal型別或者它的子類,否則,將無法呼叫run()方法。
對於Python這樣的動態語言來說,則不一定需要傳入Animal型別。我們只需要保證傳入的物件有一個run()方法就可以了:
class Timer(object):
def run(self):
print('Start...')
這就是動態語言的“鴨子型別”,它並不要求嚴格的繼承體系,一個物件只要“看起來像鴨子,走起路來像鴨子”,那它就可以被看做是鴨子。
小結
- 繼承可以把父類的所有功能都直接拿過來,這樣就不必重零做起,子類只需要新增自己特有的方法,也可以把父類不適合的方法覆蓋重寫。
- 動態語言的鴨子型別特點決定了繼承不像靜態語言那樣是必須的。