更新時(shí)間:2022-08-03 來(lái)源:黑馬程序員 瀏覽量:
在繼承關(guān)系中,子類會(huì)自動(dòng)擁有父類定義的方法,但是有時(shí)子類想要按照自己的方式實(shí)現(xiàn)方法,即對(duì)父類中繼承來(lái)的方法進(jìn)行重寫,使得子類中的方法覆蓋掉跟父類同名的方法。需要注意的是,在子類中重寫的方法要和父類被重寫的方法具有相同的方法名和參數(shù)列表。
例如,不同國(guó)家的人,打招呼的方式是不同的,中國(guó)人打招呼的方式是“吃了嗎?”,美國(guó)人打招呼的方式是“Hello”。Person類中定義了一個(gè)打招呼的方法say_hello方法進(jìn)行重寫。接下來(lái),通過(guò)一個(gè)案例來(lái)模擬上述場(chǎng)景,如例12-5所示。
例12-5 重寫父類的方法.py
# 定義表示人的類 class Person(object): # 打招呼的方法 def say_hello(self): print("--Hello--") # 定義Chinese類繼承自Person類 class Chinese(Person): # 中國(guó)人打招呼的方法 def say_hello(self): print("吃了嗎?") # 創(chuàng)建Chinese類的對(duì)象 chinese = Chinese() chinese.say_hello()
在例12-5中,首先定義了Person類,該類中有一個(gè)say_hello方法,然后定義了Person類的子類Chinses,該類重寫了從父類繼承的say_hello方法,最后創(chuàng)建Chinese類的對(duì)象chinese,調(diào)用say_hello方法。
程序運(yùn)行的結(jié)果如圖12-10所示。
圖12-10 運(yùn)行的結(jié)果
從程序輸出的結(jié)果可以看出,Chinese類對(duì)象調(diào)用的是重寫的say_hello方法,而不是父類的say_hello方法。