go 语言学习笔记⑨——继承
代码复用,通过匿名字段实现
eg
type Person struct {
name string
sex string
age int
}
type Student struct {
Person//只有类型, 没有名字,匿名字段 (继承Person成员)
idx int
add string
}
Student 就继承了Person
package main
import (
"fmt"
)
type Person struct {
name string
sex string
age int
}
type Student struct {
Person
idx int
add string
}
func main() {
var student Student = Student{}
fmt.Printf("%+v", student)
//{Person:{name: sex: age:0} idx:0 add:}
}
顺序赋值
var student Student = Student{Person{"rcm", "c", 19}, 100, "hb"}
fmt.Printf("%+v", student)
//{Person:{name:rcm sex:c age:19} idx:100 add:hb}
自动推导
student := Student{Person{"rcm", "c", 19}, 100, "hb"}
fmt.Printf("%+v", student)
//{Person:{name:rcm sex:c age:19} idx:100 add:hb}
指定成员初始化
没有赋值的默认值为0
student := Student{idx: 100}
fmt.Printf("%+v", student)
//{Person:{name: sex: age:0} idx:100 add:}
继承中有相同成员
就近原则, 赋值给子类
package main
import (
"fmt"
)
type Person struct {
name string
sex string
age int
}
type Student struct {
Person
idx int
add string
name string
}
func main() {
student := Student{}
student.name = "rcm"
fmt.Printf("%v", student)
//{{ 0} 0 rcm}
//如果要给父类中同名元素赋值
student.Person.name = "hxw"
fmt.Printf("%v\n", student)
//{{hxw 0} 0 rcm}
}
基础类型的匿名字段
type mystr string
student := Student{100, "hb"}
fmt.Printf("%v\n", student)
//{100 hb}
结构体指针类型的匿名字段
type Person struct {
name string
sex string
age int
}
type Student struct {
*Person
idx int
add string
}
var student Student = Student{&Person{"rcm", "c", 19}, 100, "hb"}
fmt.Println(student.Person.age, student.Person.name, student.Person.sex)
//19 rcm c
要用&给成员赋值