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

【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式

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

文章目录


一、结构体方法重写和方法值

1.方法重写

方法重写又称方法覆盖。方法重写概念方法的重写是指两个方法的返回值、方法名、参数的类型和个数相同(子类重写父类的方法)。方法的重写,不能发生在同类中,只能发生在子类中。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

代码语言:javascript
复制
package main

import "fmt"

type Person struct {
	name string
	age  int
}

func (p *Person) PrintInfo() {
	fmt.Println("这是父类中的方法")
}

type Student struct {
	Person
	score float64
}

func (p *Student) PrintInfo() {
	fmt.Println("这是子类中的方法")
}

func main() {
	var stu Student
	stu.PrintInfo() // 如果父类中的方法名称与子类中的方法名称一致,那么通过子类的对象调用的是子类中的方法。方法重写
	stu.Person.PrintInfo()
}
在这里插入图片描述
在这里插入图片描述

2.方法值和方法表达式

  • 方法值:相当于方法指针
  • 方法表达式:显示的传参(这里没有继承概念)

方法值和方法表达式,也就是“方法对象赋值给变量” 两种使用方式:

  • 1)隐式调用, struct实例获取方法对象---->方法值
  • 2)显示调用, struct类型获取方法对象, 须要传递struct实例对象作为参数。---->方法表达式
代码语言:javascript
复制
package main

import "fmt"

type Person struct {
	name string
	age  int
}

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

func main() {
	per := Person{"愚公", 18}
	per.PrintInfo()

	//方法值。
	//f := per.PrintInfo
	//fmt.Printf("%T",f)
	//f()
	//方法表达式
	f := (*Person).PrintInfo
	f(&per)

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、结构体方法重写和方法值
    • 1.方法重写
      • 2.方法值和方法表达式
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档