上次說到的過載是指同一類中方法和方法之間的關係,這次向大家介紹的重寫是子不同類中方法和方法的關係;在介紹重寫之前,要先說說繼承和多型;
物件的繼承代表了「is -a 」的關係,a和b可以描述成b是a,就可以稱為b可以繼承a,不能相互顛倒。繼承者是被繼承者的特殊化。在繼承中,子類是派生類,父類是基類。子類不但繼承父類的所有特徵,還可以定義新的特徵。
1、子類擁有父類非private的屬性和效能,也就是說,父類中protected修飾的類成員,對子類公開,但對其他類不公開;
2、子類具有自己的屬性和和功能,即子類可以擴充套件父類沒有的屬性和功能;
3、子類還可以以自己的方式實現父類的功能(方法重寫);
使得所有子類公共的部分都放到了父類,使得**得到了共享,避免了重複。
父類變,子類不得不變。
猴子和動物的關係是繼承
繼承是多型的基礎,沒有繼承多型無意。繼承是為了復用,而多型是為了在復用時解決耦合問題。下面我用不是活生生的例子給大家從概念處講解一下。(打擾
michael joseph jackson老先生了
)多型:不同的物件可以執行相同的動作,但是通過她們自己的實現**來執行。傑克遜把自己的衣服分別給自己的三個歌迷,三個歌迷穿著這件衣服裡唱歌,執行唱歌的動作,雖然是用自己的方法唱,唱出來的聲音不一樣。
1、子類以父類的身份出現(歌迷以傑克遜的身份出現);
2、子類在工作時以自己的方法來實現(歌迷在唱歌時有自己的唱法);
3、子類以父類的身份出現時,子類特有的屬性和方法不可使用(歌迷在唱時不要暴露出中文和自己的真實身份,不要說中國話)
為使子類的例項完全來自父類的類成員父類,父類必須將成員宣告為虛擬的。(通過在該成員的返回型別之前新增virtual關鍵字來實現。)
把歌迷與歌迷之間真正不同的地方在傑克遜類裡虛擬起來,比如歌迷的唱法,歌迷唱的動作。至於傑克遜的衣服,都是一樣的,穿法不變,就不必虛擬,哪個歌迷都能穿,歌迷可以直接拿過來用。用到虛擬的,就是不能直接拿過來用的,真正有區別的,要經過掩飾一下的。比如
想把中文「傑克遜」改
為「michael joseph jackson
」,只需要該乙個地方就可以了。當然,這是在繼承的基礎上用到的多型。如果都不承認自己是傑克遜的歌迷,那就沒必要穿他的衣服了,更別說再參加這次唱歌的活動了;
多型(重寫,繼承)
多型 同乙個事情有多種形態。同樣的方法名,完成不一樣的具體方法的實現 如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法 多型 class animal 這是個動物 def init self,can fly false print 呼叫 init 函式當例項化時 self.can...
過載和重寫 繼承和多型的區別
過載,繼承,重寫和多型的區別 1 繼承是子類獲得父類的成員。2 重寫是繼承後重新實現父類的方法。3 過載是在乙個類裡一系列引數不同名字相同的方法。4 多型則是為了避免在父類裡大量過載引起 臃腫且難於維護。網上看到乙個有趣的說法是 繼承是子類使用父類的方法,而多型則是父類使用子類的方法。下面的例子包含...
Python 封裝 繼承 多型 重寫
一 封裝 1 定義 根據職責將屬性和方法封裝到乙個抽象的類中。就是只能在類的內部訪問,外部訪問屬性或方法會報異常。2 實現 python中封裝很簡單,在屬性或者方法名稱前邊加上兩個下劃線就好。二 繼承 1 定義 指提供了同一類物件共性的處理方法,子類繼承父類共性的東西。有利於 的復用性。三 多型 1...