前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年08月 Go教学课程 032-结构体方法继承

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

作者头像
愚公搬代码
发布2022-09-21 08:46:55
1450
发布2022-09-21 08:46:55
举报
文章被收录于专栏:历史专栏

文章目录


一、结构体方法继承

1.继承的概念

继承是指一个子类(或称为派生类)继承父类(或称为基类)的特征(属性和操作)。继承是面向对象程序设计时实现代码复用的重要手段,它允许在原有的类的基础上进行扩展,增加功能,这样新产生的类称为子类。

2.go中的继承

但在Go 语言本身并不支持继承。但可以使用组合的方法,实现类似继承的效果。Go 语言中,把一个结构体嵌入到另一个结构体的方法,称之为组合。

3.方法继承

代码语言:javascript
复制
package main

import "fmt"

type Student struct {
	Person
	score float64
}
type Person struct {
	id   int
	name string
	age  int
}

func (p *Person) PrintInfo() {
	fmt.Println(*p)
}

func main() {
	stu := Student{Person{101, "张三", 18}, 90}
	stu.PrintInfo()
}
在这里插入图片描述
在这里插入图片描述

4.方法继承案例

代码语言:javascript
复制
package main

import "fmt"

//记者:我叫张三 ,我的爱好是偷拍,我的年龄是34,我是一个男狗仔。
//程序员:我叫孙全,我的年龄是23,我是男生,我的工作年限是 3年。
// 1: 定义父类

type Person struct {
	name string
	age  int
	sex  string
}

// 2: 给父类添加方法。
func (p *Person) SetValue(userName string, userAge int, userSex string) {
	p.sex = userSex
	p.age = userAge
	p.name = userName
}

// 3: 定义相应的子类。
// 记者类
type Rep struct {
	Person
	Hobby string // 爱好
}

func (r *Rep) RepSayHello(h string) {
	r.Hobby = h
	fmt.Printf("我叫%s ,我的爱好是%s,我的年龄是%d,我是一个%s记者\n", r.name, r.Hobby, r.age, r.sex)
}

// 程序员类
type Pro struct {
	Person
	WorkYear int
}

func (p *Pro) ProSayHello(workYear int) {
	p.WorkYear = workYear
	fmt.Printf("我叫%s,我的年龄是%d,我是%s,我的工作年限是 %d年\n", p.name, p.age, p.sex, p.WorkYear)
}

// 4: 给子类添加相应的方法
// 5: 展示效果

func main() {
	var rep Rep
	rep.SetValue("小黄", 35, "男")
	rep.RepSayHello("跟拍")

	var pro Pro
	pro.SetValue("小菊", 28, "男")
	pro.ProSayHello(3)
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/08/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、结构体方法继承
    • 1.继承的概念
      • 2.go中的继承
        • 3.方法继承
          • 4.方法继承案例
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档