- 目錄 -
繼承
尚硅谷Golang課

繼承

type Student struct {
	Name  string
	Age   int
	Score int
	//共有的字段
}

type Pupil struct {
	Student //套入
	Covid19 bool
}

type College struct {
	Student //套入指針效率更好
	SexExp  bool
}

func (stu *Student) ShowInfo() {
	fmt.Printf("姓名=%v 年齡=%v 成績=%v\n", stu.Name, stu.Age, stu.Score)
}

func (stu *Student) SetScore(s int) {
	stu.Score = s
}

func (p *Pupil) Test() {
	fmt.Println("小學生考試")
}

func main() {
	pupilA := &Pupil{}
	pupilA.Student.Name = "tome"
	pupilA.Student.Age = 8
	pupilA.Covid19 = true

	pupilA.Test()
	pupilA.Student.SetScore(66)
	pupilA.Student.ShowInfo()
	fmt.Println("是否得肺炎", pupilA.Covid19)

	C1 := College{}
	C1.Student.Name = "John"
	C1.Age = 23 //其實可以省略.Student
	C1.SexExp = false

	C1.Student.SetScore(39)
	C1.ShowInfo() //其實可以省略.Student
	fmt.Println("是否破處", C1.SexExp)

	//如果有低能把結構體跟匿名結構體用了相同的字段或方法,會採取就近訪問原則
	// 如果在一個結構中嵌入多個匿名結構,且匿名結構有同名的字段,那就必須指明匿名結構否則報錯

	//組合
	var d D
	d.a.Name = "xxxx" //有名字的結構體訪問時就要上完整名字
}

//組合
type D struct {
	a Student //有名字的結構體
}

上次修改於 2021-08-01

此篇文章的評論功能已經停用。