Go的继承

// Go同时嵌套另外一个结构体实现继承,这点和C语言是一样的
// 同样地,我们要使用父的属性或者方法的时候童颜可以间接进行调用的

匿名结构体

type Person struct {
	name string `json:"name"`
	age  int8   `json:"age"`
}

type Student struct {
	Person  // 这里的Person就是一个匿名结构体,没有自己的名字
	hobby []string
}

若 a 是嵌套在 b 里面的匿名结构体,则有如下的三个规则
(0) 调用的时候我们可以 b.a.XXX 也可以直接 b.XXX
(1) 当我们直接通过 b 访问字段或方法时,其执行流程如下比如 b.Name
(2) 编译器会先看 b 对应的类型有没有 Name, 如果有,则直接调用 B 类型的 Name 字段
(3) 如果没有就去看 B 中嵌入的匿名结构体 A 有没有声明 Name 字段,如果有就调用,如果没有
继续查找..如果都找不到就报错.

有名结构体(组合关系)

type Person struct {
	name string `json:"name"`
	age  int8   `json:"age"`
}

type Student struct {
	p Person // 这里就是有名结构体,我们在访问有名结构体的属性或者方法的时候必须指定有名结构体是哪个
	hobby []string
}

多重继承

// 就是通过嵌套多个匿名结构体实现
// 为了代码的简洁性,不是很建议使用多重继承
type Person struct {
	name string `json:"name"`
	age  int8   `json:"age"`
}

type Action struct {
	action string
}

type Student struct {
	Person
	Action
// 这里嵌入了两个匿名结构体就是多重继承
}