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

举报
愚公搬代码 发表于 2022/08/31 21:19:10 2022/08/31
【摘要】 一、结构体继承 1.结构体继承的概念继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。但在go语言中并没继承的概念,只能通过组合来实现继承。组合就是通过对现有对象的拼装从而获得实现更为复杂的行为的方法。继承:一个struct嵌套了另外一个匿名的struct从而实现了继承。组合:一个struct嵌...

一、结构体继承

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)
}

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。