物件導向3 抽象類與組合

2021-08-15 21:20:50 字數 1699 閱讀 4328

1>何為介面

概念:自己提供給使用者呼叫自己功能的方法/入口

介面提取了一群類共同的函式,可以把介面當做乙個函式的集合,然後讓子類去實現介面中的函式。

這麼做的意義在於歸一化,就是只要是基於同乙個介面實現的類,那麼所有的這些類產生的物件在使

用時,從用法上來說都一樣。

舉個例子,如下,初衷是繼承父類的子類都有相同的方法名(這樣別人調取方便,因為只要是繼承這個類

例項化的物件,那麼肯定都有這個方法),但是都是各自實現(比如人say hello,狗是汪汪叫)。

很顯然,這樣寫是沒有意義的,甚至完全沒有實現開始的想法,要想「有意義」的實現之前的初衷,引入 抽象類的概念

2>抽象類

如果說類是從一堆物件中抽取相同的內容而來的,那麼抽象類就是從一堆類中抽取相同的內容而來的,內容包括資料

屬性和函式屬性。

從實現角度來看,抽象類與普通類的不同之處在於:抽象類中只能有抽象方法(沒有實現功能),該類不能被例項化,

只能被繼承,且子類必須實現抽象方法。

python需要借助模組實現抽象類。

把上面的例子,稍加修改,就實現了抽象類,如下,inte***ce類只需定義方法,無需實現功能,而繼承它的子類則必須實現

它定義的方法,否則會報錯,因子類沒有定義抽象方法

這樣才是實現了真正的 歸一化,不管你是 人類,狗類,貓類,只要你繼承了你們共同屬性抽取出來的這個抽象類,那麼

例項出來的人,狗,貓,就都有say方法,並且就是這個名稱,

len的例子

去編輯這些檔案的時候,根本不必考慮物件究竟是.txt,還是.conf。

3>抽象類與介面

抽象類的本質還是類,指的是一組類的相似性,包括資料屬性和函式屬性,而介面只強調函式屬性的相似性。

4>組合

在乙個類中以另外乙個類的物件作為資料屬性,稱為組合

舉個例子,如下,試想乙個場景,要檢視老師的的授課資訊,你可能會想,定義乙個teacher類,把老師的屬性和課程

的屬性都寫進去,再定義個方法檢視就好了。恩,那我要檢視100個老師的授課資訊,要定義100個類嗎?

你想:由於每個老師的授課資訊

可能相同或者不同,那可以抽取相同的課程寫乙個類,讓老師繼承啊,nonono

他們之間根本不是 「什麼是什麼」的關係,不要濫用繼承,那根本沒意義,如這種兩個類之間關聯不大,但是又確實存在

聯絡時,可以用組合類。

所以,組合類也是**重用的一種實現方式

物件導向 抽象類與抽象方法

如果乙個類不與具體的食物相聯絡,而只表達一種抽象的概念,僅是作為其派生類的乙個基類,這樣的類就是派生類,在抽象類中,宣告抽象類中宣告抽象方法是,如果加上abstract關鍵字則為抽象方法。abstract 修飾符可用於類 方法 屬性 索引器和事件。在類宣告中使用abstract 修飾符以指示某個類只...

物件導向 抽象類

抽象 裡邊有未明確的東西。抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件,因為呼叫抽象方法沒意義。4 抽象類中的抽象方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類物件呼叫。如果子類只覆蓋部分抽象方法,那麼該...

物件導向 抽象類

抽象類概述 什麼是抽象類?什麼是抽象方法?抽象方法 沒有方法體的方法就是抽象方法,必須用abstract關鍵字去修飾。抽象類 擁有抽象方法的類,就是抽象類。應用場景 在不同的子類往上抽取方法時,方法的定義是一樣的,但是方法體不一樣,所以抽取到父類時就可以使用抽象方法。簡單來說 當多個子類擁有同乙個功...