14.组合与继承¶
本节所讨论的组合与转发相当于其他高级编程语言中的 类的继承 。
组合¶
所谓组合,就是将多个结构体嵌套组合,比如一个结构体内包含另一个结构体。
转发¶
转发讨论的是方法,或者说,称为方法的继承。
这个特性主要是对于结构体的匿名成员。
当使用匿名成员时,如果多个匿名成员没有同名方法,则可以直接通过结构体变量.匿名成员方法
来访问匿名成员的方法。类似继承。
如果使用了匿名成员,同时又声明了与匿名成员的同名方法,则结构体的方法会覆盖匿名成员的“继承”访问形式。即,通过结构体变量.方法
访问到的将是结构体的方法,而不是匿名成员的。
使用匿名成员后,依然可以使用结构体变量.匿名成员.成员方法
访问成员的方法,关于匿名成员的内容见下。
结构体的匿名成员¶
当使用如下写法时,可以匿名导入:
type temperature struct{
degree float64
}
type day struct{
year int64
day int64
month int64
}
type myStruct struct{
day
temperature
}
Note
虽然我们称这种特性为匿名成员,但实际上还是不能直接通过myStruct.year
访问的,对于不指定名称的成员变量,go将自动为其分配名称为类型名称。所以,还是需要通过myStruct.day.year
来访问。