社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
继承:当多个结构体存在相同的字段和方法时,可以从这些结构体中抽象出结构体,在该结构体中定义这些相同的字段和方法。可以解决代码复用问题,让我们的编程更加靠近人类的思维。
也就是说,在Golang中,如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。
继承的好处:
继承细节:
案例:比如学生考试系统,小学生和大学生考试,有很多可以复用的代码,这时可以提取出来。
package main
import "fmt"
//编写一个学生考试系统
type Student struct {
Name string
Age int
Score int
}
//将Pupil和Graduate共有的方法绑定到 *Student
func (stu *Student) ShowInfo() {
fmt.Printf("学生名:%v 年龄:%v 成绩:%v n",stu.Name,stu.Age,stu.Score)
}
func (stu *Student) SetScore (score int){
//业务判断
stu.Score = score
}
//小学生
type Pupil struct {
Student //嵌套了Student匿名结构体
}
func (p *Pupil) testing() {
fmt.Println("小学生正在考试中..")
}
//大学生
type Graduate struct {
Student //嵌套了Student匿名结构体
}
func (p *Graduate) testing() {
fmt.Println("大学生正在考试中...")
}
func main() {
//当我们对结构体嵌入了匿名结构体,使用方法会发生变化
pupil := &Pupil{}
pupil.Student.Name = "tom"
pupil.Student.Age = 8
pupil.testing()
pupil.SetScore(80)
pupil.Student.ShowInfo()
graduate := &Graduate{}
graduate.Student.Name = "mary"
graduate.Student.Age = 24
graduate.testing()
graduate.SetScore(95)
graduate.Student.ShowInfo()
}
执行结果如下图所示:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!