[Golang] Polymorphism in Golang

以下是我與 ChatGTP 老師問答的總結,所以可能會有錯誤,請斟酌閱讀,感謝

什麼是 Polymorphism ?

poly: Multiple

morphism: Forms

Polymorphism 是物件導向程式設計 (OOP) 中的一個核心概念,表示同一個方法 (method) 可以在不同的物件中具有不同的實現方式。這個概念讓我們可以用統一的方式來操作不同的物件,並且能夠根據不同的情況,呼叫適當的方法。

Polymorphism 的核心思想是「以一種通用的介面,操作不同的物件,使其產生不同的結果」。在 Polymorphism 中,物件的行為會根據所屬的物件而有所不同。

這種行為的多樣性,是 Polymorphism 最重要的特徵之一。

Polymorphism 的目的?

藉由 Polymorphism 使 code 更加靈活、reusable、易擴展和可維護

Eg:

type Shape interface { Area() float64 } type Circle struct { Radius float64 } func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius } type Rectangle struct { Width float64 Height float64 } func (r Rectangle) Area() float64 { return r.Width * r.Height } // 靈活:藉由 type Shape interface 可以讓不同的 struct 對同一 function 做出不同的 respond。這使得我們可以在運行時決定使用哪個具體類型的 struct,而不必在編譯時就指定。 func CalculateArea(s Shape) float64 { return s.Area() } // Line 48-56: 易擴展,直接新增一個 Triangle type Triangle struct { Base float64 Height float64 } func (t Triangle) Area() float64 { return 0.5 * t.Base * t.Height } func main() { c := Circle{Radius: 5.0} r := Rectangle{Width: 10.0, Height: 5.0} fmt.Println(CalculateArea(c)) // Output: 78.53981633974483 fmt.Println(CalculateArea(r)) // Output: 50 }

References