父類的一些成員,子類繼承周去重寫從而實現不同的功能。
import abc
class Animal(metaclass=abc.ABCMeta): #同一類事物:動物
@abc.abstractmethod
def talk(self):
pass
class People(Animal): #動物的形態之一:人
def talk(self):
print('say hello')
class Dog(Animal): #動物的形態之二:狗
def talk(self):
print('say wangwang')
class Pig(Animal): #動物的形態之三:豬
def talk(self):
print('say aowu')
多態分爲兩種,編譯時的多態和運行時的多態。
編譯時的多態性:編譯時的多態性是通過重載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操作。
運行時的多態性:運行時的多態性就是指直到系統運行時,才根據實際情況決定實現何種操作。C#中運行時的多態性是通過覆寫虛成員實現。
重載指的是同一個累中有兩個或者多個名字但是參數不同的方法。
重寫有override修飾符和new 修飾符兩種:
override是指“覆蓋”,是指子類覆蓋了父類的方法,子類的對象無法再訪問父類中的該方法。
new是指“隱藏”,是指子類隱藏了父類的方法,通過一定的轉換,可以在子類的對象中訪問父類的方法。
動態綁定是多態的基礎。