当前位置:网站首页>【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式
【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式
2022-08-09 08:10:00 【愚公搬代码】
一、结构体方法重写和方法值
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)
}

边栏推荐
猜你喜欢
一文搞懂 条件编译和预处理指令 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined 详解

3D精彩案例,清软英泰建成综合轻量化显示平台!

传输层协议介绍

3D软件开发工具HOOPS全套产品开发介绍 | HOOPS Exchange、HOOPS Communicator

MySql homework practice questions

P1064 Jin Ming's Budget Plan

Introduction to Network Layer Protocols

静态路由原理与配置

SOLIDWORKS Simulation教程:计算物体的固有频率

NAT地址转换的原理与配置
随机推荐
Win10电脑的WLAN消失的故事
梅科尔工作室--BP神经网络培训笔记
Solidworks 2022 Inspection新增功能:光学字符识别、可自定义的检查报告
Conversion between number systems
网络布线及数制转换
.net(二) 配置数据库
Notes on OpenHarmony Open Source Meeting (Nanjing Station)
eTS UI development learning
Introduction to the Endpoint
Analysis that may result in a savecount of 0 in Loadrunner checkpoints
引导过程与服务控制
pip3 source change to improve speed
test process
get一个小技巧,教你如何在typora写文章上传图片到博客上
实现弹簧柔性状态的2种方式 | Solidworks教程
VMware虚拟机强制关闭后,无法联网
【MySQL】mysql:解决[Err] 1093 - You can‘t specify target table ‘表名‘ for update in FROM clause问题
Shell之函数与数组
进程和计划任务
配置本地yum源仓库