package main import ( "fmt" ) //继承可以解决代码复用,让编程更加接近人类思维 //当多个结构体存在相同属性和方法时,可以从这些结构体中抽象出结构体,在该结构体中定义这些相同的属性和方法 //其他结构体不需要重新定义这些属性和方法,只需要嵌套一个匿名结构体即可 //也就是说golang中,如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承的特性 type Student struct { Name string Age int Score int } type Pupil struct { Student//嵌入匿名结构体Student } type Graduate struct { Student } func (stu *Student) ShowInfo() { fmt.Printf("学生名=%v 年龄=%v 成绩=%v\n", stu.Name, stu.Age, stu.Score) } func (stu *Student) SetScore(score int) { stu.Score = score } func (stu *Pupil) testing() { fmt.Println("小学生正在考试中....") } func (stu *Graduate) testing() { fmt.Println("大学生正在考试中....") } func main() { pupil := &Pupil{} pupil.Student.Name = "tom" pupil.Student.Age = 8 pupil.testing() pupil.Student.SetScore(80) pupil.Student.ShowInfo() graduate := &Graduate{} graduate.Student.Name = "jack" graduate.Student.Age = 22 graduate.testing() graduate.Student.SetScore(90) graduate.Student.ShowInfo() }