跳转至

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来访问。