Go 中的脆弱基類問題?
儘管擁抱組合而不是繼承,但有人擔心Go 是否仍然面臨“脆弱基類” “問題。本文研究了這個主題,並探討了語言級別的潛在解決方案。
脆弱基類問題
在經典的物件導向程式設計中,出現了脆弱基類問題當對基類的修改破壞了依賴其方法的子類時。這種情況是由於虛擬方法重寫,實際方法實現是在運行時確定的。採用組合代替繼承,但提供了一種嵌入機制,將嵌入類型的方法包含在嵌入類型中。 。 >
在Java 中
Java 對方法重寫的支援造成了脆弱基類問題的可能性。 MyCounter 將因MyCounter.Inc() 呼叫Counter.IncBy() 時無限循環而變得不可用,從而導致遞歸呼叫。 🎜>在Go 中,對Counter.IncBy() 進行相同的修改不會導致相同的問題。但這不會建立循環,因為呼叫的是Counter 的Inc() 函數,而不是MyCounter 的函數。而Go 的組合機制和缺乏方法重寫將脆弱的基類問題緩解到了顯著的水平。
以上是Go 的組合方法是否完全消除了脆弱基類問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!