import "fmt"
type A struct {
a string
}
func NewA(aa string) *A {
return &A{aa}
}
func (a *A) Print() {
fmt.Printf("%T\n", a)
}
type B struct {
*A
}
func NewB(aa string) *B {
return &B{NewA(aa)}
}
func main() {
b := NewB("bb")
b.Print()
}
// go里面用组合模拟了继承, 其本质是一种语法糖, 无法实现继承中动态绑定等特性. 且构造函数, 连伪继承都达不到.
// 因此本例中, 输出是 `*main.A`