iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

1
Modern Web

【這些年我似是非懂的 Javascript】系列 第 32

【這些年我似是非懂的 Javascript】那些年我睡掉的物件導向 #淺談 #Part 2

嗨各位好久不見,
今天要來分享上次的續集 第 2 part ,
上篇講到建構器
今天要來分享關於繼承和多重繼承的部分。

繼承

上次有稍微提到這部分

例如一台車子就可以先定義更通用的類別叫做載具(Vehicle),
而載具裡面定義了各種不同類型的功能,比方說上面所說的載人、推進、飛天,
當我們想要定義其他載具,比方說火車,我們就可以透過繼承或是擴充,就可以達到我們要的。

今天再來分享一個例子來解釋一下甚麼是繼承

一對夫妻生小孩,父母的基因會複製在小孩身上,但是小孩是與父母分離的個體,但是特徵會被父母影響。以物件導向也就是說父母的 DNA 就是父類別,小孩的 DNA 就是子類別,子類別會擁有父類別複製過來的最初的行為,並且子類別可以做複寫任何繼承過來的行為,或是定義新的行為。
也就是小孩長大了也可以長江後浪推前浪或是一代不如一代XDD 又或是創造新的屬於自己的天地。

多重繼承

甚麼? 難道是影分身?

還是如果是以父母的 DNA 來說...
咳咳嗯...
誰是我爸爸
如果以父母的 DNA 來比喻感覺很怪異,但是你想是卡片合成之類的可能比較好想像 xD
某些物件導向語言可以指定一個以上的父類別來繼承,這就叫做多重繼承,也就是說拔拔"們"的類別定義都會複製到子類別中。
就像是如果我爸是巴菲特 + Lebron James + 畢卡索 + 李白,那我感覺我就是神了 (各種亂尬)
這聽起來非常棒對吧?
是不是想說...
貴圈真亂 xDD

對的!除了貴圈真亂之外他還有可能會造成一些複雜的問題出現。
但是他也不是完全沒缺點,如果其中兩個父類別都提供了相同的方法,那子類別會取用哪個呢?
就像是如果我爸爸是李白加上杜甫那我該選擇要選用誰的造詩功力?
那在假使可以指定選用哪個那是不是又跟原本多重繼承的概念有點衝突,好像不是那麼優雅又聰明了。

除了這個還有另一個變體叫做 鑽石問題(diamond problem)

如果像上面圖這樣,
B 和 C 繼承父類別 A,並且各自都覆寫那個方法接著 D 又多重繼承 B 和 C ,那他該使用 B 還是 C 的方法呢?

我們這主題是 Javascript ,所以回到 JS 本身他會怎麼處理呢?
答案是...
不用處理xDDD
因為 JS 本身沒有提供原生的機制去進行多重繼承

哈哈哈
哈哈

嗚嗚嗚嗚嗚 QQ

(有人認為這是好事,畢竟他可以減少複雜度,但是現實中沒辦法避免開發人員自己去用各種方式偽造多重繼承的效果


以上是今天的內容
下篇會講關於最後提到的偽造多重繼承

感謝你的收看
我們下次見


上一篇
【這些年我似是非懂的 Javascript】那些年我睡掉的物件導向 #淺談 #Part 1
下一篇
【這些年我似是非懂的 Javascript】那些年我睡掉的物件導向 #淺談 #Part 3
系列文
【這些年我似是非懂的 Javascript】34

尚未有邦友留言

立即登入留言