Go接口重写方法时失效的情况

21 阅读1分钟

给定一个结构体A和它的方法

type A struct{}

func (a *A) Print() {
	fmt.Println("aaa")
}

func (a *A) CallPrint() {
	a.Print()
}

我们现在需要另外一个结构体B,我们希望让B重写A的Print方法

type B struct{ A }

func (b *B) Print() {
	fmt.Println("bbb")
}

此时我们开始调用B的两个方法,一个是直接调用Print,一个是间接调用CallPrint

func main() {
	var b B
	b.CallPrint()
	b.Print()
}

可以看到这里直接调用的情况会重写方法,但是间接调用的时候,还是使用原来的方法
image.png