写点什么

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

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

    阅读完需:约 1 分钟

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

1.方法重写

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


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 实例对象作为参数。---->方法表达式


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)
}
复制代码



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

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

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

评论

发布
暂无评论
【愚公系列】2022年10月 Go教学课程 033-结构体方法重写、方法值、方法表达式_10月月更_愚公搬代码_InfoQ写作社区