前幾天看到王克明寫的 物件 (Object) 的媽媽是 類別 (Class)? ,本來以為大家都很瞭解。沒想到昨天就有人問我一個問題,他說:child instance如何存取parent instance的屬性。 我回答說:要存取parent class的屬性必須是static,否則就把parent做成singleton物件。 他又說:parent instance可能有多個,不能做成singleton。 這下我真的傻眼,因為這實在是本質上的錯誤。Class是沒有實體的東西,所謂的class variable事實上需要實體來儲存於記憶體之中。換一個角度想,Parent Class產生出多個instance,child那可能知道要存取那一個?就算用shared memory也辦不到。而 物件導向分析的一個根本精神就在於子類別能夠完全取代父類別,如果有子類別需要存取父類別的情況,就是設計上的錯誤。 簡而言之,要看穿 Instance的本質也不過就是一堆machine code , Class不過是一堆定義 。 所有的變數或屬性,都必須依附於實體之上,包括static變數 ,只是static變數由系統處理掉。