在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
方法。