1. 程式人生 > >為什麼類是單繼承的?介面是多繼承的?

為什麼類是單繼承的?介面是多繼承的?

如果將資源的組織結構看作空間的話資源確實是單繼承的,確實應該是樹。因為一個空間單元只可能有一個直接的父空間單元不可能會有兩個,因為空間是不交叉的。
那個PrivilageBigram兩兩組合出的多繼承應該是從運動的角度觀察事物的,運動就是變化,就是時間。比如一個人肯定是隻有一個直接領導的,但是這個人在開展工作的時候是可以從任何他人那裡得到(繼承或者別人委託給他)許可權的,這是多繼承的。
類是單繼承的,介面是多繼承的,人們的知識樹的確是良好的、一致的。類關注的是結構、結構類比空間,介面關注的是行為、行為類比時間。
時間 == 運動 == 變化 == 狀態的保持 == 連續性(關於這個等式的來源見末尾)
資源、空間是單繼承的是因為這樣:一個0 1物理開關在一個時刻只可能是至多一個單元(比如一個int型別包括一排32個物理開關)中的節點,一個物理開關不可能在同一個時間具有多個父節點。但是當世界運動起來後事情就不是這樣了,世界運動起來就是引入時間維度(時間 == 運動 == 變化 == 狀態的保持 == 連續性),引入時間維度後一個物理開關可以在不同時刻具有不同的父節點。

時間是什麼?

設想一個狀態:這個狀態沒有“物質”沒有“空間”沒有“能量”……總之什麼也沒有。讓我用null來代表這個狀態。 顯然null不會突然間改變。因為一個空的世界怎麼會‘突然’生出東西來呢?null若改變就得無緣無故地生出東西。null要保持 null的狀態,null要連續,這裡的“狀態保持”需要時間,或者說狀態保持就是時間,再或者說連續性就是時間。絕對的不變的狀態不存在,時間是衡量狀態改變快慢的物理量。狀態不能突然改變的連續的性質使null具有了時間概念。

下班回來的路上我突然感覺我悟到道了。單繼承是棵正樹,多繼承是棵倒樹;或者說單繼承是棵倒樹,多繼承是棵正樹。到底哪個定義成正哪個定義成負無需糾結。
單繼承是子節點從父節點繼承事物,多繼承是父節點從子節點繼承事務。這剛好是棵自然界的樹,自然界的樹有地上部分和地下部分。當那棵樹獲取輸入(光、二氧化碳、氮磷鉀元素)的時候是多繼承的,是父節點從子節點繼承事物;但那棵樹生長的時候,當那棵樹分配自身能量的時候是單繼承的,子節點從父節點繼承事物。這可能就是新陳代謝。這可能是道,是那個太極圖上的道的分形。


多繼承是和場景有關,是動態的,如同一個演員演戲,更換不同的佈景場景,他有不同的行為介面。

而單繼承是靜態的,是一種天然屬性,和主體動作無關。

從動態和靜態兩個方面區分,就不會把動態的硬搞成靜態的,函式動態組合能解決的硬是使用靜態結構去解決,雖然都是樹,但是建立樹的時機不同。


兄弟,感覺有點走火入魔了。。。。

印象中有一篇相關的文章說得不錯,特地搜了一下:

設計模式及繼承和介面
其中有兩句話,說得很好:
繼承:描述事物的自然屬性和行為的複用。
介面:描述事物的社會屬性和行為的複用。
--------------------------------------------------
進一步,借用一下蘇格拉底的問題:我是誰,我來自哪裡,我將去哪裡?
我們也可以提出類似的問題:物件是什麼?物件從哪裡來(繼承)?物件將去哪裡(介面)?這問題可大可小,可不回答。

落實在程式碼中,如果是有狀態的行為複用,用繼承;如果是無狀態的行為的複用,用介面。

在有些語言中,繼承之所以是單繼承:原因怕是猶如鳩摩智一般,練了小無相功、又學了少林七十二絕技、易筋經,而又沒有領悟化解之佛法(管理好各種繼承來的狀態),容走火入魔呀