@Override
注解进行标记。在 Go 中,嵌入类型的方法可以被嵌入类型所覆盖或扩展,但没有类似于 @Override
的特殊注解。总的来说,Go 语言的类型嵌入与 Java 的继承有相似之处,但又有一些不同。Go 更注重组合而非严格的继承关系,通过嵌入类型可以实现代码的重用和组合,使得代码更加灵活和可扩展。
type Animal struct {
name string
}
func (a Animal) Speak() {
fmt.Println("Animal speaks")
}
type Dog struct {
Animal
breed string
}
func (d Dog) Bark() {
fmt.Println("Dog barks")
}
type Flyer interface {
Fly()
}
type Bird struct {
Animal
}
func (b Bird) Fly() {
fmt.Println("Bird flies")
}
type FlyingDog struct {
Dog
Bird
}
func main() {
f := FlyingDog{}
f.Speak() // 继承自 Animal
f.Bark() // 继承自 Dog
f.Fly() // 继承自 Bird
}
在上面的示例中,有四个类型:Animal
、Dog
、Bird
和 FlyingDog
。
Animal
类型包含一个 name
字段和一个 Speak
方法。Dog
类型嵌入了 Animal
类型,并添加了一个 breed
字段和一个 Bark
方法。Bird
类型嵌入了 Animal
类型,并实现了 Flyer
接口的 Fly
方法。FlyingDog
类型同时嵌入了 Dog
和 Bird
类型,因此它包含了 Animal
的字段和方法,以及 Dog
和 Bird
的字段和方法。在 main
函数中,我们创建了一个 FlyingDog
类型的实例 f
。通过 f
,我们可以访问和调用嵌入类型的字段和方法。f
继承了 Animal
、Dog
和 Bird
的字段和方法,可以使用 f.Speak()
、f.Bark()
和 f.Fly()
进行调用。