面向对象编程三大特征3
多重继承介绍:
结构体的匿名字段是基本数据类型,如何访问,下面代码输出什么?
匿名字段练习:
type Monster struct {
Name string
Age int
}
type A struct {
Monster
int //匿名字段是基本数据类型
n int
}
func main() {
//演示一下匿名字段基本数据类型的使用
var a A
a.Name = "狐狸精"
a.Age = 300
a.int = 20
a.n = 40
fmt.Println("a=", a)
}
说明:
1)如果一个结构体有int 类型的匿名字段,就不能有第二个。
2)如果需要有多个int类型的字段,则必须给int字段指定名字。
多重继承说明:
如一个struct 嵌套了多个匿名结构体,那么该结构体可以直接访问嵌套的匿名结构体的字段和方法,从而实现了多重继承。
案例演示:
type Goods struct {
Name string
Price float64
}
type Brand struct {
Name string
Address string
}
type TV struct {
Goods
Brand
}
func main() {
tv1 := TV {Goods{"电视机001", 5000},Brand{"海尔", "山东青岛"},}
tv2 := TV {
Goods{"电视机002", 5000.99},
Brand{"西门子", "北京"},
}
tv3 := TV {
Goods{
Price : 4000,
Name : "电视机003",
},
Brand{
Name : "夏普",
Address : "上海",
},
}
fmt.Println(tv1)
fmt.Println(tv2)
fmt.Println(tv3)
}
多重继承细节说明:
1)如嵌入的匿名结构体有相同的字段名或者方法名,则在访问时,需要通过匿名结构体类型名来区分。
tv1 := TV {Goods{"电视机001", 5000},Brand{"海尔", "山东青岛"},}
fmt.Println(tv1.Goods.Name)
fmt.Println(tv1.Price)
2)为了保证代码的简洁性,建议大家尽量不使用多重继承