下面这段代码输出什么?
type A interface {
ShowA() int
}
type B interface {
ShowB() int
}
type Work struct {
i int
}
func (w Work) ShowA() int {
return w.i + 10
}
func (w Work) ShowB() int {
return w.i + 20
}
func main() {
c := Work{3}
var a A = c
var b B = c
fmt.Println(a.ShowA())
fmt.Println(b.ShowB())
}
答 可以成功编译 且输出 13 和 23
c := Work{3} // 这里声明了变量c 并且赋值了结构体 Work{3}
var a A = c // 因为A 是接口,这里要看c结构体 Work是否实现了接口A要求的函数ShowA() int。这题是有func (w Work) ShowA() int { 因此是可以正确的赋值的。
var b B = c// 与A同理
fmt.Println(a.ShowA()) // a接口下有ShowA 因此也可以成功调用
fmt.Println(b.ShowB()) //与a同理