package main
import "fmt"
type person struct {
name string
age int
}
//如果一个struct嵌入另一个匿名结构体,就可以直接访问匿名结构体的字段或方法,从而实现继承
type student struct {
person //匿名字段
number string
}
//如果一个struct嵌套了另一个【有名】的结构体,叫做组合
type teacher struct {
p person //有名字段
mobile string
}
func (p *person) run() {
fmt.Println(p.name, " person run")
}
func (s *student) reading() {
fmt.Println(s.name, " student reading")
}
func main() {
s := student{person{"lisi", 20}, "000"}
fmt.Println(s.name) //访问结构体的【匿名】字段,student对象没有name字段,访问的是从person继承过来的name字段
s.run() //访问结构体的【匿名】字段实现的方法,虽然student对象没有实现run方法,但student继承了person,person类型实现的方法能被直接访问
t := teacher{person{"wangwu", 25}, "111"}
fmt.Println(t.p.name) //访问【有名】结构体的字段。不是继承,不能被直接访问,需要指定结构体
t.p.run()
}