方法重写又称方法覆盖。方法重写概念方法的重写是指两个方法的返回值、方法名、参数的类型和个数相同(子类重写父类的方法)。方法的重写,不能发生在同类中,只能发生在子类中。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。
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()
}
方法值和方法表达式,也就是“方法对象赋值给变量” 两种使用方式:
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)
}