函數介面與抽象類別皆用於程式碼可重用性,但實作方式不同:函數介面透過引用函數,抽象類別透過繼承。函數介面不可實例化,抽象類別可實例化。函數介面必須實作所有宣告的方法,抽象類別可只實作部分方法。
Go 函數介面與抽象類別的異同
在Go 語言中,函數介面和抽象類別是兩種重要的概念,它們都用於表示行為和提供程式碼的可重複使用性。然而,兩者在實現方式和使用場景上有所不同。
函數介面
函數介面是一種引用具有特定簽章的函數的型別。它定義了函數的輸入和輸出參數,但不需要實作函數體。
語法:
type fnType func(parameters) (returnType)
範例:
type Handler func(w http.ResponseWriter, r *http.Request)
抽象類別
抽象類別是只包含聲明而沒有實作的類別。它定義了一個接口,要求子類別實作這些聲明。
語法:
type Interface interface { Method1() Method2() }
異同
相同點:
不同點:
func
關鍵字,而抽象類別使用 interface
關鍵字。 實戰案例
函數介面:
可以使用函數介面來建立鬆散耦合的程式碼,允許不同的組件使用不同的實作。
type Shape interface { Area() float64 } type Square struct { Side float64 } func (s *Square) Area() float64 { return s.Side * s.Side } type Circle struct { Radius float64 } func (c *Circle) Area() float64 { return math.Pi * c.Radius * c.Radius } func CalculateArea(shapes []Shape) float64 { totalArea := 0.0 for _, shape := range shapes { totalArea += shape.Area() } return totalArea }
抽象類別:
可以使用抽象類別來定義公共的行為,並允許子類別根據需要實作或覆寫這些行為。
type Animal interface { Speak() string } type Dog struct{} func (d Dog) Speak() string { return "Woof!" } type Cat struct{} func (c Cat) Speak() string { return "Meow!" }
以上是深入探討 Golang 函數介面與抽象類別的異同的詳細內容。更多資訊請關注PHP中文網其他相關文章!