面试题答案
一键面试- B是否自动实现接口I:
- 是的,在Go语言中,如果结构体B嵌入了结构体A,并且A实现了接口I,那么B也自动实现了接口I。因为在Go语言中,接口的实现是隐式的,只要类型提供了接口定义的所有方法,就认为该类型实现了这个接口。由于B嵌入了A,所以B拥有A的方法,也就实现了接口I。
- B重写A中实现的接口方法M的方法:
- B可以在自己的结构体中定义与接口I中方法M相同签名的方法,这样就重写了A中实现的方法M。 以下是代码示例:
package main
import "fmt"
// 定义接口I
type I interface {
M()
}
// 定义结构体A
type A struct{}
// A实现接口I的方法M
func (a A) M() {
fmt.Println("A's M method")
}
// 定义结构体B,嵌入A
type B struct {
A
}
// B重写接口I的方法M
func (b B) M() {
fmt.Println("B's M method")
}
你可以这样使用:
func main() {
var i I
a := A{}
b := B{}
i = a
i.M() // 输出: A's M method
i = b
i.M() // 输出: B's M method
}
在上述代码中,首先定义了接口I
,结构体A
实现了接口I
的方法M
。结构体B
嵌入了A
,并且B
重写了M
方法。在main
函数中,分别将A
和B
的实例赋值给接口类型I
,并调用M
方法,观察到调用的是各自对应的M
方法。