多重遺傳與多態性有什麼區別?多重遺傳與多態性有什麼區別?
在一本書我紅了行說
存在在類級別多繼承不支持。這意味着您一次不能擴展一個以上的課程。
這是矛盾的多態的概念,在同一本書作爲
多態性描述爲創建從特定的基類
現在幾個對象的過程中,如果多重繼承沒有在PHP不允許那麼多態是如何被允許的呢?
多重遺傳與多態性有什麼區別?多重遺傳與多態性有什麼區別?
在一本書我紅了行說
存在在類級別多繼承不支持。這意味着您一次不能擴展一個以上的課程。
這是矛盾的多態的概念,在同一本書作爲
多態性描述爲創建從特定的基類
現在幾個對象的過程中,如果多重繼承沒有在PHP不允許那麼多態是如何被允許的呢?
就像Ikke說的,多重遺傳與多態性無關。
如果我能畫一個類圖,多重繼承是這樣的:
Base A Base B
^ ^
\ /
\ /
Child
所以,該類Child
會繼承來自兩個類的屬性和行爲。 Java和PHP等許多語言都不允許這樣做,但Python確實如此。
多態性另一方面,是當你可以抽象出專業化。首先,類圖:
Animal
^^
/ \
/ \
Cat Dog
而且你可以做到以下幾點:
// Assuming we have a pack of animals
// This is Java
for (Animal pet : pack)
pet.speak();
每個pet
會說這取決於實現不同的事情。
Ahaaa很好的解釋這是在我心中的錯誤觀念謝謝很多Xavier ...... – 2010-04-23 06:35:57
多態性在PHP中的問題是因爲返回類型沒有被強制執行(它是一種弱類型語言),所以不能保證'speak'實際返回一個字符串。它可能會返回一個數據庫對象。 (見http://stackoverflow.com/questions/749712/is-what-seems-like-polymorphism-in-php-really-polymorphism) – SeanJA 2010-04-23 07:30:52
明智的解釋,+1 – Jimmy 2010-04-23 07:59:48
這兩者有很小的關係。
多重繼承是編譯時/運行後靜態的東西。多態性是一種僅在運行時確定調用子類型上的哪種方法的技術。
PHP不允許多繼承。
多繼承意味着一個對象從兩個不同的父類繼承。程序員自行車手既是程序員又是自行車手。當程序員類將其成員數據favorite_activity
定義爲hacking
而自行車手也具有favorite_activity
但它是riding
時出現問題。如果你問程序員自行車手她的favorite_activity
是什麼,那麼正確的答案是什麼?
多態性涉及對象的行爲。它可以讓你告訴一個對象去做一些事情,並讓結果的動作取決於對象的類,即使你不知道它到底是什麼。所以你遇到一個Person,雖然你不知道它是一個Programmer還是一個Cook,並且你告訴她perform_your_job()
。如果是程序員,她會編寫代碼,如果是庫克她會做飯,但是您不必特別告訴她write_code()
或make_a_meal()
。
可以用多晶形來闡述一下嗎?..它的有趣.. plsss可以做到這一點... – 2010-04-23 06:33:27
PHP不允許多態...? – SeanJA 2010-04-23 06:04:09
...因爲它是一種弱類型的語言 – SeanJA 2010-04-23 06:05:46
那麼爲什麼課本在OOP的書中解釋了多態性的概念呢在PHP – 2010-04-23 06:07:10