写点什么

【愚公系列】2022 年 10 月 Go 教学课程 030- 结构体继承

作者:愚公搬代码
  • 2022-10-16
    福建
  • 本文字数:1016 字

    阅读完需:约 1 分钟

一、结构体继承

1.结构体继承的概念

继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。


但在 go 语言中并没继承的概念,只能通过组合来实现继承。组合就是通过对现有对象的拼装从而获得实现更为复杂的行为的方法。


  • 继承:一个 struct 嵌套了另外一个匿名的 struct 从而实现了继承。

  • 组合:一个 struct 嵌套了宁外一个 struct 的实例实现了组合。


type Animal  struct {
}
//继承type Cat struct { //匿名 *Animail}
//组合type Dog struct { animal Animal}
复制代码

2.结构体继承的案例

2.1 普通类型

package main
import "fmt"
type Student struct { Person // 匿名字段,只有类型,没有成员的名字 score float64}type Teacher struct { Person salary float64}type Person struct { id int name string age int}
func main() { //var stu Student=Student{Person{100,"愚公",31},90} // 部分初始化 // var stu Student=Student{score:100} var stu Student = Student{Person: Person{id: 100}} fmt.Println(stu) //fmt.Println(stu1)}
复制代码


2.2 结构体继承指针类型

package main
import "fmt"
type Student struct { *Person // 匿名字段 score float64}type Person struct { id int name string age int}
func main() { var stu Student = Student{&Person{101, "愚公", 18}, 90} fmt.Println(stu.name)}
复制代码

3.结构体继承成员值的修改

package main
import "fmt"
type Student struct { Person score float64}type Person struct { id int name string age int}
func main() {
var stu Student = Student{Person{101, "愚公1号", 18}, 90} var stu1 Student = Student{Person{102, "愚公2号", 18}, 80} stu.score = 100 fmt.Println("愚公一号考试成绩:", stu.score) fmt.Println(stu1.score) fmt.Println(stu1.Person.id) fmt.Println(stu1.id)}
复制代码


4.结构体的多重继承

package main
import "fmt"
type Student struct { Person score float64}type Person struct { Object name string age int}type Object struct { id int}
func main() { var stu Student stu.age = 18 fmt.Println(stu.Person.age) stu.id = 101 fmt.Println(stu.Person.Object.id)}
复制代码



发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022-03-01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年10月 Go教学课程 030-结构体继承_10月月更_愚公搬代码_InfoQ写作社区