沒有指標和引用的多態性:一個神話
多態性是物件導向程式設計的一個基本面,使程式碼能夠針對物件表現出不同的行為不同的子類別。然而,許多開發人員思考為什麼多態性似乎需要使用指標或引用。
記憶體分配的欺騙性作用
「如果在堆上分配內存,你有動態綁定,」有人可能會想。雖然確實如此,但僅僅記憶體分配不足以實現多態性。舉個例子:
Derived d; Base* b = &d;
這裡,d 駐留在堆疊上,但多態性在 b 上無縫工作。這凸顯了記憶體位置與多態性無關。
語意:多態性的關鍵
關鍵因素在於語意。當您建立基底類別指標或對衍生類別實例的參考時,您實際上保留了對衍生類別方法的存取權限。考慮:
Base c = Derived();
雖然 c 是 Base 的實例,但它不能表現出多態行為,因為它儲存 Derived 物件的切片版本,失去了其衍生類別識別碼。
指標與引用
雖然指標和引用都建立了間接性,但指針提供了額外的彈性。它們允許您指向任何類型的對象,包括基底類別和衍生類別。相反,引用只能綁定到特定類型的對象,限制了它們的多態能力。
結論
沒有指標或引用的多態是誤解。指標和引用的使用可確保編譯器維護必要的類型信息,從而允許動態解析方法呼叫和程式碼中真正的多態行為。
以上是多態性可以在沒有指標或引用的情況下存在嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!