go 语言学习笔记⑨——继承

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

要用&给成员赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值