抽象類和多型

2021-09-11 22:42:07 字數 2943 閱讀 3898

抽象類是乙個特殊的類,它的特殊之處在於只能被繼承,不能被例項化

從實現角度來看,抽象類與普通類的不同之處在於:抽象類中只能有抽象方法(沒有實現功能),該類不能被例項化,只能被繼承,且子類必須實現抽象方法。這一點與介面有點類似,但其實是不同的。

# 匯入abc模組實現抽象類

import abc

# 定義抽象類,抽象類不能被例項化

class

animal

(metaclass = abc.abcmeta)

: all_type =

'animal'

@abc.abstractmethod

defrun(self)

:pass

@abc.abstractmethod

defeat(self)

:pass

@abc.abstractmethod

defsleep

(self)

:pass

class

people

(animal)

:# 定義類的抽象父類中有的相似屬性,在子類中都必須定義,否則會報錯

defrun

(self)

:# 功能屬性的命名必須與抽象類中對應功能屬性名稱相同

print

('peopel is running'

)def

eat(self)

:print

('people is eating'

)def

sleep

(self)

:print

('people is sleeping '

)class

pig(animal)

:def

run(self)

:print

('pig is running'

)def

eat(self)

:print

('pig is eating'

)def

sleep

(self)

:print

('pig is sleeping'

)people = people(

)pig = pig(

)people.run(

)people.eat(

)people.sleep(

)pig.run(

)pig.eat(

)pig.sleep(

)

# 多型:同一種事物的多種心態,即父類下面的子類:子類中與父類中相似功能,在子類中表現的不同形態

import abc

class

animal

(metaclass=abc.abcmeta)

:#同一類事物:動物

@abc.abstractmethod

deftalk

(self)

:pass

class

people

(animal)

:#動物的形態之一:人

deftalk

(self)

:print

('say hello'

)class

dog(animal)

:#動物的形態之二:狗

deftalk

(self)

:print

('say wangwang'

)class

pig(animal)

:#動物的形態之三:豬

deftalk

(self)

:print

('say aoao'

)# 多型性:可在不考慮物件型別的情況下而直接使用物件

po1 = people(

)dog1 = dog(

)pig1 = pig(

)# 靜態多型性:如任何型別都可以用運算子+進行運算

# 動態多型性,如下為動態多型

po1.talk(

)dog1.talk(

)pig1.talk(

)# 也可定義乙個函式來使用

deffunc

(animal)

: animal.talk(

)func(po1)

func(dog1)

func(pig1)

# 鴨子型別

#二者都像鴨子,二者看起來都像檔案,因而就可以當檔案一樣去用

class

disk

:def

read

(self)

:print

('disk read'

)def

write

(self)

:print

('disk write'

)class

text

:def

read

(self)

:print

('text read'

)def

write

(self)

:print

('text write'

)disk = disk(

)text = text(

)disk.read(

)disk.write(

)text.read(

)text.write(

)print(id

(disk.read)

)print(id

(text.read)

)

多型的好處:

1.增加了程式的靈活性,以不變應萬變,不論物件千變萬化,使用者都是同一種形式去呼叫,如func(animal)

2.增加了程式額可擴充套件性, 通過繼承animal類建立了乙個新的類,使用者無需更改自己的**,還是用func(animal)去呼叫

多型 抽象類

多型 當中體現多型性,就是父類指向子類 左父右子 格式 父類名稱 物件名 new 子類名稱 介面名稱 物件名 new 實現類名稱 使用多型,物件向上轉型,是絕對安全的,但物件一旦向上轉型父類,就不能呼叫子類原本特有的類容 物件向下轉型,就是還原的動作 格式 子類名稱 物件名 子類名稱 父類物件 含義...

多型 抽象類和介面

多型是同乙個行為具有多個不同表現形式或形態的能力。多型就是同乙個介面,使用不同的例項而執行不同操作 多型的優點 消除型別之間的耦合關係 可替換性 可擴充性 介面性靈活性 簡化性多型存在的三個必要條件 繼承重寫 父類引用指向子類物件 過載和重寫 抽象類 1 抽象類使用abstract修飾 2 抽象類不...

多型 抽象方法 抽象類

類的多型主要指方法重寫 abstract關鍵字修飾的類 方法 就是抽象類 方法 方法重寫的要求 子類中重寫的方法要與父類中的方法同名 子類中重寫的方法形參個數要與父類中同名方法的形參個數一致 子類中重寫的方法型別要與父類中同名方法的型別一致 靜態 成員方法 子類中重寫的方法的訪問許可權不能低於父類中...