在Go語言中,我們不使用傳統意義上的繼承,而是通過組合和接口來實現類似繼承的功能。這里有一個例子來說明如何使用組合和接口實現類似繼承的效果:
package main
import (
"fmt"
)
// 基類(接口)
type Animal interface {
Speak() string
}
// Dog 結構體
type Dog struct{}
// Dog 實現了 Animal 接口的 Speak 方法
func (d Dog) Speak() string {
return "Woof!"
}
// Cat 結構體
type Cat struct{}
// Cat 實現了 Animal 接口的 Speak 方法
func (c Cat) Speak() string {
return "Meow!"
}
// AnimalWrapper 結構體,包含一個 Animal 類型的字段
type AnimalWrapper struct {
animal Animal
}
// AnimalWrapper 提供了一個新的 Speak 方法,可以調用其內部 Animal 的 Speak 方法
func (aw AnimalWrapper) Speak() string {
return aw.animal.Speak()
}
func main() {
dog := Dog{}
cat := Cat{}
animalWrapperDog := AnimalWrapper{animal: dog}
animalWrapperCat := AnimalWrapper{animal: cat}
fmt.Println(animalWrapperDog.Speak()) // 輸出:Woof!
fmt.Println(animalWrapperCat.Speak()) // 輸出:Meow!
}
在這個例子中,我們定義了一個Animal
接口,它有一個Speak
方法。然后我們創建了兩個結構體Dog
和Cat
,它們都實現了Animal
接口。接下來,我們創建了一個AnimalWrapper
結構體,它包含一個Animal
類型的字段。這樣,AnimalWrapper
就可以利用其內部的Animal
對象的方法。最后,我們在main
函數中創建了Dog
和Cat
的實例,并將它們包裝在AnimalWrapper
中,然后調用它們的Speak
方法。