面试题答案
一键面试// Dog结构体定义
type Dog struct {
Name string
}
// Dog结构体实现Animal接口的Speak方法
func (d Dog) Speak() string {
return "Woof!"
}
-
签名一致性要求:
Dog
的Speak
方法签名必须与Animal
接口中Speak
方法签名完全一致。在这个例子中,Animal
接口的Speak
方法签名为Speak() string
,即没有参数,返回值类型为string
。Dog
的Speak
方法同样没有参数,返回值类型也为string
。如果Dog
的Speak
方法参数列表或返回值类型与接口定义不一致,Go语言编译器会报错,因为Dog
没有正确实现Animal
接口。
-
在多态实现中的重要性:
- 在Go语言中,接口实现多态是基于接口类型的。当不同类型(如这里的
Dog
结构体)实现了同一个接口(如Animal
接口),并且它们的方法签名与接口定义的方法签名一致时,就可以通过接口类型来操作不同的实现类型。例如:
- 在Go语言中,接口实现多态是基于接口类型的。当不同类型(如这里的
func MakeSound(a Animal) {
fmt.Println(a.Speak())
}
- 在上述
MakeSound
函数中,参数类型为Animal
接口类型,它可以接受任何实现了Animal
接口的类型,这里Dog
实现了Animal
接口,所以可以将Dog
类型的变量传入MakeSound
函数。如果没有这种签名一致性,就无法确定一个类型是否真正实现了接口,也就无法实现多态。通过签名一致性,Go语言实现了一种隐式的接口实现机制,使得代码更加简洁、灵活,不同类型只要满足接口方法签名要求就可以实现多态。