Go语言中 继承的理解和实现细节 (Golang经典编程案例) - Go语言中文社区

Go语言中 继承的理解和实现细节 (Golang经典编程案例)


继承:当多个结构体存在相同的字段和方法时,可以从这些结构体中抽象出结构体,在该结构体中定义这些相同的字段和方法。可以解决代码复用问题,让我们的编程更加靠近人类的思维。

也就是说,在Golang中,如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。

继承的好处

  1. 代码的复用性提高了
  2. 代码的拓展性和维护性提高了

继承细节

  1. 结构体可以使用嵌套匿名结构体所有的字段和方法,即,首字母大写或者小写的字段,方法,都可以使用;
  2. 嵌套匿名结构体后,也可以在创建结构体变量时,直接指定各个匿名结构体字段的值;
  3. 多重继承,如果一个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()
}

执行结果如下图所示:
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/cui_yonghua/article/details/94362727
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-08-27 19:49:25
  • 阅读 ( 903 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢