这种用法叫什么? 而且 type B 中无论写成 *A 或者 A,都能跑通,这里有什么区别吗?
谢谢
```
package main
import "fmt"
type A struct {
valA int
}
type InfA interface {
greeting()
}
func (a *A) greeting() {
fmt.Println("Hello, A")
}
type B struct {
*A // or A?
valB int
}
func main() {
a := new(A)
b := new(B)
a.greeting()
b.greeting()
}
```
go没有继承的概念,它是通过组合来实现类型的扩展的,组合也就是在一个类型内嵌入其它类型字段;
可以省略字段名称而直接写类型名,编译器会隐式地使用类型名来做字段名;
组合类型将拥有嵌入类型的方法集,调用这些方法可用两种方式:简写形式和不简写形式;
多看书,这些书上说的都很清楚
#5
更多评论
在struct A中声明另一个struct B:官方叫匿名成员变量,说到底还是个变量
那么 B 的实例变量就能调用A的method:实质上是B的实例通过A的匿名变量调用A的方法
无论写成 *A 或者 A,都能跑通:这是因为有自动引用跟自动解引用
#1