今天我們會以圖示來演繹 singleton class 的概念:
想像一下,今天有一個物件被某個類別 new 出來時, Ruby 就幫你再宣告一個 隱形的class
,這個隱形的 class 會繼承原 class , 然後印出這個物件。
這時我們會這麼描述 singleton method
那繼承呢?
我們已經把一條印出的實線,加上一條印出的虛線以及繼承的虛線,現在來湊湊看繼承吧!
我們現在知道 class 也是物件,所以也是由別的 class 所印出來的。當然圖中的 Klass 以及 Superklass 也不例外。
那麼 A 和 B 分別是什麼呢?
就直覺來說會覺得 A 可以填 Class
,反正任何 class 都是由 Class 印出來的,但如此便會發現找不到 B 要填什麼?如果也填 Class 的話變成 Class 繼承 Class ,這有點不太合理。
其實仔細想想,我們現在認為每個物件都是由一個只跟自己對應的 隱形的class
所印出,像是 Klass 有一個隱形的 Klass (圖右下角),那麼以此類推 A 就是 隱形的 SuperKlass
。
接下來就比較簡單了,假定 SuperKlass 沒有另外繼承自別的 class ,那麼上一層就是 Object ,另外,這些隱形的 class 是我們想像的輔助,任一個 class 依然是由 Class 印出來的,所以上圖藍色的實線事實上並不存在,接著,我們就一口氣把圖畫完吧!
假想了一天,明天就實際用 code 來驗證一下吧!
此文同步刊登於CJ-Han的網站